我有一个安装程序可以写入HKLM\Software\DroidExplorer\InstallPath
。在任何 x86 机器上,它都可以很好地写入预期位置,而在 Windows XP x64 和 Windows 7 x64 上,它也可以写入预期位置,这实际上是HKLM\Software\Wow6432Node\DroidExplorer\InstallPath
.
稍后在安装过程中,我的引导程序(也是 x86)尝试读取该值。在所有 x86 Windows 计算机上,它都是成功的,在 Windows XP x64 和 Windows 7 x64 上,但 Windows Vista x64 无法找到密钥。如果我查看注册表,它实际上并没有将其写入 Windows Vista 上的 Wow6432Node;它把它写到Software\DroidExplorer\InstallPath
.
如果我不强制告诉安装程序写入 Wow6432Node,它会将值写入Software\DroidExplorer\InstallPath
,但引导程序仍然尝试在 Wow6432Node 中查找,因为。这适用于所有 x64 系统。
为什么 Windows Vista x64 是我遇到此问题的唯一一款?有没有解决的办法?
我只是想添加一个编辑,表明它仍然处于打开状态。以下建议均未解决此问题。
注册表重定向在 Windows Vista x64 上失败这一事实非常奇怪,因为根据 MSDN,注册表重定向器 http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx,Windows Vista 应该也会受到影响。
另一个答案中的评论,“这不起作用,当我构建安装在 x64 PFiles 中的 x64 版本的应用程序时,它告诉我我正在使用 64 位安装目录并且不允许 Win64=no“让我对您正在构建什么类型的 MSI 感到有点困惑。
注册表重定向只会影响 MSI 中的 32 位组件。如果 WiX 项目的目标平台是 x86,则生成的 MSI 是 32 位 MSI,并且所有组件都将受到注册表重定向的影响。
另一方面,如果 WiX 项目的目标平台是 x64,则唯一受注册表重定向影响的组件将是那些显式标记为 Win64=no 的组件。 (默认情况下,如果您的目标平台是 x64,WiX 假定所有组件都是 64 位。)
请注意,如果注册表项的组件包含在 ProgramFiles64 文件夹内,则 WiX 将假定它是 64 位组件,并且不会受到注册表重定向的影响。这就是 WiX 不允许您在该组件上指定 Win64=no 的原因。
您应该验证包含您确实想要重定向的注册表项的每个组件是否都配置为使用 ProgramFiles(32 位),因为它是 x86 和 x64 MSI 文件中的父目录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)