2010-07-18 104 views
1

我正在開發一個部署項目(基於Wix),用於部署應用程序以使用AutoCAD運行,並在傳遞AutoCAD acad.exe時創建快捷方式它自己的論點。32位MSI:將64位應用程序的快捷方式目標路徑轉換爲32位路徑

爲了達到這個目的,有一個自定義動作DLL(C++)通過Autocad的註冊表鍵來獲取「acad.exe」位置,並在運行時使用MyInstaller.msi中的MSI Api方法創建/更新快捷方式。

問題:

在64位操作系統,如Windows 7,自定義操作讀取正確的註冊表從 '的acad.exe' 位置即C:\ Program Files文件\ AutoCAD 2010的\的acad.exe,和更新運行時msi中的快捷方式屬性。但是,當msi完成創建快捷方式時,路徑將轉換爲32位程序文件,即C:\ Program Files(x86)\ AutoCAD 2010 \ acad.exe,實際上它不存在。

我周圍的工作:

由於我的MSI是32位(x86)的,所以我創建了Win64的屬性= YES和修改自定義操作獨立的組件來更新/此組件創建快捷方式。但是快捷方式中的目標路徑仍被轉換爲C:\ Program Files(x86)。

我知道如果我將MSI轉換爲x64操作系統,這可能會得到解決,但目前我無法做出如此大的改變。

有什麼辦法可以讓32位msi創建包含x64操作系統路徑的快捷方式?

任何幫助將非常感謝..

非常感謝。

回答

0

好,我是能夠解決這個問題:

問題,32位MSI的64位操作系統,是轉換路徑(快捷鍵表)爲32位等價路徑,即我們的自定義操作DLL漸漸從64位AutoCAD的路徑註冊表項作爲C:\ Program Files \ AutoCAD 2010 \,然後將此路徑注入MSI的快捷表和目錄表。但是,當微星編寫快捷方式時,它將它轉換爲C:\ Program Files文件(x86)\ AutoCAD 2010.

我們不能在32位MSI 64位組件,但副Versa是可能的,即我們可以在64位MSI中有32位組件。

但是,在我的情況下,我必須使用64位組件快捷方式,其他組件將保持32位。

因此,我已將32位MSI轉換爲64位MSI,並在Package信息中添加了Plantform = x64。並聲明該組件爲Win64 =是。

這解決了我的問題,現在我在快捷方式中獲得了正確的路徑。

因此,現在我有2個獨立的安裝程序,即分別爲每個32位和64位。

問候

法魯克

1

您正在游泳上游對抗這個MSI。 (雖然我可以理解爲什麼。)

官方微星是從來沒有平臺nuetral。我假設你正在使用自定義操作來讀取註冊表值,因爲MSI的AppSearch/Reglocator會限制你到WoWSys64節點。之後,微軟甚至會將硬編碼的參考文件替換爲程序文件,作爲應用程序兼容性方法的一部分(基本上微軟假定您不知道自己在做什麼,並且知道自己的真正意圖)。

非正式地閱讀這個線程找到一個黑客,我想出解決這個問題。總結是我發現,如果將C:\ Program Files \轉換爲一個短路徑(C:\ Progra〜1),那麼MSI不夠聰明,無法找出您指​​的是什麼,因此它不會替代該值。

http://www.joyofsetup.com/2010/03/27/wix-msbuild-v2-0-and-x64-systems/

注意,這是一個黑客,也沒有告訴,如果微軟將在未來的版本中「修復」的方式。我唯一能想到的另一種方法就是不使用快捷表,而是編寫自定義操作來爲您創建快捷方式。

如果您不想與MSI游泳,請考慮此解決方法。創建一個小型64位EXE(是的,你可以將64位或AnyCPU exe部署到Program Files x86是一個x86 MSI),它可以作爲AutoCAD的前端啓動器。讓它查詢註冊表並找到該文件,然後啓動它或顯示一條消息,說明AutoCAD無法找到時不可用。

如果你這樣做,你會讓你的安裝更加清潔。

+0

嗨克里斯托弗 非常感謝詳細的答覆:)。 那麼,我必須使用自定義操作來使用迭代方法來讀取AutoCAD註冊表項。迭代方法的目的是由於在一臺機器上存在多個版本的AutoCAD,因此我必須爲每個版本的AutoCAD創建快捷方式,同時傳遞一些要由AutoCAD加載的文件的參數。這不能通過MSI的AppSearch/Reglocator完成。 您提出的另一種方式是我現在正在考慮的方法。然而,在此之前,我會試圖將長路徑轉換爲短路徑。 – 2010-07-18 18:57:16

+0

創建一個64位EXE是一個不錯的主意,但我必須首先與我的項目團隊經理討論,我不認爲他們會同意這個:(。 – 2010-07-18 18:58:21

+0

唯一的方法,我通過試驗樣本安裝這是64位MSI和組件也是64位。 所以我也考慮到有64位操作系統的獨立的x64bit微星,因爲x64bit MSI能夠提供32位組件。 非常感謝考慮我的查詢。:) – 2010-07-18 19:00:15