首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在WiX安装程序中安装32位文件和64位注册表设置

在WiX安装程序中安装32位文件和64位注册表设置
EN

Stack Overflow用户
提问于 2014-12-11 17:22:26
回答 4查看 3.1K关注 0票数 7

我是否可以设置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属性值的不同组件,甚至将它们放在单独的组件组中。但是,我一直得到这些构建错误(而不是警告):

代码语言:javascript
运行
复制
ICE80: This 64BitComponent RegistryComponent uses 32BitDirectory INSTALLFOLDER
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-11 18:10:10

如果您支持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

票数 3
EN

Stack Overflow用户

发布于 2014-12-11 18:41:40

这是一个不太好的解决方案,但如果您不介意在卸载后继续使用注册表项,则可以只使用自定义操作来添加注册表项。

如果用C#编写自定义操作,只需执行以下操作:

代码语言:javascript
运行
复制
using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{
    // do it
}
票数 4
EN

Stack Overflow用户

发布于 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 &quot;[DriverDir]default.reg' Return='ignore' />

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27428755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档