为什么Windows Vista x64上的x86 WiX安装程序不能在注册表中写入Wow6432Node的密钥?

Rya*_*rad 6 registry 64-bit x86 wix windows-vista

我有一个写入的安装程序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是我遇到此问题的唯一一个?有没有解决的办法?

我只是想添加一个仍然打开的编辑.以下建议均未解决此问题.

Dou*_*bal 2

注册表重定向在 Windows Vista x64 上失败这一事实非常奇怪,因为根据 MSDN、注册表重定向器,Windows Vista 也应该受到它的影响。

另一个答案中的评论“这不起作用,当我构建安装在 x64 PFiles 中的应用程序的 x64 版本时,它告诉我我正在使用 64 位安装目录并且不允许 Win64=否”让我对您正在构建什么类型的 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 文件中的父目录。