簡體   English   中英

在WiX安裝程序中安裝32位文件和64位注冊表設置

[英]Install 32 bit files and 64 bit registry settings in WiX installer

我是否可以使用WiX設置64位注冊表項以引用32位程序文件路徑?

我正在為另一個軟件編寫插件。 我希望我的插件dll進入C:\\Program Files (x86)\\MyPlugin\\MyPlugin.dll 而不是 C:\\Program Files\\MyPlugin\\MyPlugin.dll因為dll是32位,而不是64位。

但是 ,我需要注冊表項進入HKLM/Software/Company/Product/Etc.... 而不是 HKLM/Wow6432Node/Software/Company/Product/Etc....因為實際讀取注冊表項的過程是64位。 該64位進程讀取注冊表並啟動一個32位進程來沙箱dll。

有沒有辦法做到這一點? 我嘗試使用具有不同Win64屬性值的不同組件,甚至將它們放在單獨的組件組中。 但是,我不斷收到這些構建錯誤(不是警告):

ICE80: This 64BitComponent RegistryComponent uses 32BitDirectory INSTALLFOLDER

一個有點差的解決方案,但你可以只是一個自定義操作來添加注冊表項,如果你不介意他們在卸載后粘附。

如果您在C#中編寫自定義操作,則可以執行以下操作:

using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{
    // do it
}

如果您支持32位和64位計算機,則需要兩個單獨的MSI設置:

http://blogs.msdn.com/b/heaths/archive/2008/01/15/different-packages-are-required-for-different-processor-architectures.aspx

因此,您的32位安裝會為任何32位客戶端創建任何COM條目,而64位安裝程序具有寫入注冊表的32位和64位組件。

http://msdn.microsoft.com/en-us/library/aa367451(v=vs.85).aspx

只有一個32位和64位安裝程序版本的簡單解決方案是使用要添加的密鑰(來自regedit)導出.reg文件,然后在安裝期間運行自定義操作,即:

<CustomAction Id='Add_Registry_Keys' Execute='deferred' Directory='DriverDir' Impersonate='no' ExeCommand='regedit.exe /s &quot;[DriverDir]default.reg' Return='ignore' />

您也可以抑制ICE錯誤,而不僅僅是警告。 這意味着您可以在x86 msi中使用Win64屬性。 忽略ICE驗證的設置可在“工具設置”選項卡下的“項目屬性”中找到。

它可能不推薦,但如果它工作,它仍然比自定義動作的替代方案更好。

暫無
暫無

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

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