![](/img/trans.png)
[英]Using WiX installer for .NET control to set registry keys on 32 vers. 64 bit, WoW6432Node
[英]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設置:
因此,您的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 "[DriverDir]default.reg' Return='ignore' />
您也可以抑制ICE錯誤,而不僅僅是警告。 這意味着您可以在x86 msi中使用Win64屬性。 忽略ICE驗證的設置可在“工具設置”選項卡下的“項目屬性”中找到。
它可能不推薦,但如果它工作,它仍然比自定義動作的替代方案更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.