簡體   English   中英

32位MSI:將64位應用程序的快捷方式目標路徑轉換為32位路徑

[英]32bit MSI: Converting shortcut target path of 64bit app to 32 bit Path

我正在開發一個部署項目(基於Wix),該項目用於部署要與AutoCAD一起運行的應用程序,並在傳遞其自變量的同時創建AutoCAD acad.exe的快捷方式。

為此,有一個自定義操作dll(C ++),它可以通過Autocad的注冊表項進行迭代,並獲取“ acad.exe”位置,並在運行時使用MyInstaller.msi中的MSI Api方法創建/更新快捷方式。

問題:

在像Windows 7這樣的x64位操作系統上,“自定義操作”正在從注冊表即C:\\ Program Files \\ AutoCAD 2010 \\ acad.exe中讀取正確的“ acad.exe”位置,並在運行時更新msi中的快捷方式屬性。 但是,當msi完成創建快捷方式后,該路徑將轉換為32位程序文件,即C:\\ Program Files(x86)\\ AutoCAD 2010 \\ acad.exe,該文件實際上不存在。

我的工作:

由於我的msi是32位(x86),因此我創建了一個單獨的組件,其屬性為Win64 = Yes,並修改了自定義操作以更新/創建該組件的快捷方式。 但是快捷方式中的目標路徑仍然可以轉換為C:\\ Program Files(x86)。

我知道是否可以將我的MSI轉換為x64 OS,但可以解決此問題,但是目前,我無法進行太大的更改。

32位MSI有什么辦法可以創建包含x64 OS路徑的快捷方式?

任何幫助將不勝感激..

非常感謝。

您正在與此相對的MSI上游游泳。 (盡管我能理解為什么。)

正式地,MSI絕不是平台中立的。 我假設您正在使用自定義操作來讀取注冊表值,因為MSI的AppSearch / Reglocator會將您限制在WoWSys64節點上。 之后,MSI甚至將硬編碼的引用替換為程序文件,以作為應用程序兼容性方法的一部分(基本上,Microsoft假定您不知道自己在做什么,並且他們知道自己的真正意思)。

非正式地-閱讀此線程以查找我發現可以解決此問題的黑客。 摘要是我發現,如果將C:\\ Program Files \\轉換為短路徑(C:\\ Progra〜1),則MSI不夠聰明,無法弄清您要引用的內容,因此它不能替代值。

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

請注意,這是一個hack,無法判斷Microsoft是否會在將來的版本中對其進行“修復”。 我能想到的唯一其他方法是您不使用快捷方式表,而是編寫自定義操作來為您創建快捷方式。

如果您不想與MSI競爭,請考慮采用這種解決方法。 創建一個小的64位EXE(是的,您可以將64bit或AnyCPU exe部署到Program Files x86是x86 MSI),它充當AutoCAD的前端啟動器。 使它查詢注冊表表並找到文件,然后啟動它或顯示一條消息,指出如果找不到AutoCAD,則AutoCAD不可用。

如果這樣做,將使您的安裝更加清潔。

好的,我能夠解決它:

問題是 ,在64位操作系統上,32位MSI正在將路徑(在快捷方式表中)轉換為32位等效路徑,即我們的Custom Action dll從64位注冊表項獲取AutoCAD的路徑為C:\\ Program Files \\ AutoCAD 2010 \\,然后將該路徑注入到MSI的快捷方式表和目錄表。 但是,當MSI編寫快捷方式時,它將其轉換為C:\\ Program Files(x86)\\ AutoCAD 2010。

我們不能在32位MSI中具有64位組件 ,但是反之亦然,即我們可以在64位MSI中具有32位組件。

但是,就我而言,我必須對快捷方式使用64位組件,而其他組件將保持32位。

因此,我在軟件包信息中添加了Plantform = x64,將我的32位MSI轉換為64位MSI。 並將組件聲明為Win64 = Yes。

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

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

最好的祝福

法魯克

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM