我是否可以设置64位注册表项来引用使用WiX的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
发布于 2014-12-11 18:10:10
如果您支持32位和64位机器,则需要两个独立的MSI设置:
因此,32位安装为任何32位客户端创建任何COM条目,64位安装程序具有写入注册表的32位和64位组件。
http://msdn.microsoft.com/en-us/library/aa367451(v=vs.85).aspx
发布于 2014-12-11 18:41:40
这是一个不太好的解决方案,但如果您不介意在卸载后继续使用注册表项,则可以只使用自定义操作来添加注册表项。
如果用C#编写自定义操作,只需执行以下操作:
using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{
// do it
}
发布于 2015-02-06 10:26:07
只有一个32位和64位安装程序版本的解决方案非常简单,就是导出一个.reg文件,其中包含您想要添加的键(来自regedit),然后在安装期间运行一个自定义操作,即:
<CustomAction Id='Add_Registry_Keys' Execute='deferred' Directory='DriverDir' Impersonate='no' ExeCommand='regedit.exe /s "[DriverDir]default.reg' Return='ignore' />
https://stackoverflow.com/questions/27428755
复制相似问题