12

我的应用程序是使用“ Any CPU”配置构建的。应用程序的 WIX 安装程序是使用构建的,platform=x86因此生成的 MSI 是 32 位的。

当我在 64 位 Windows 上运行 32 位 MSI 时。该[ProgramFilesFolder]属性解析为“C:\Program Files (x86)”,注册表路径解析为Wow6432Node. 当我运行应用程序时,进程是 64 位的 - 正如预期的那样。

据我了解,在阅读了很多关于 SO 的相关帖子后。在 64 位 Windows 上,将[ProgramFilesFolder]解析为“C:\Program Files”并将注册表路径转换为正常路径(不在 下Wow6432Node)。我需要一个单独的 64 位 MSI。我试图避免这种情况 - 对我来说,拥有一个单独的 64 位 MSI[ProgramFilesFolder]并仅用于解析正确位置的注册表路径是不值得的。只要我的程序仍然在 64 位 Windows 上运行 64 位,我并不关心它默认安装在 "C:\Program Files (x86)" 并且一些注册表值存在于Wow6432Node.

所以,我的问题是,当我使用 32 位 MSI 在 64 位 Windows 上安装“AnyCPU”程序时,除了默认情况下 installDir 是“C:\Program Files (x86)”和一些注册表值存储在Wow6432Node?

4

1 回答 1

3

唯一可能出现的真正危害是如果您的程序试图读取存储在 32 位注册表视图中的值。当然,当作为 64 位进程运行时,它会找不到它们。如果发生这种情况,那么您可以简单地使用 RegistryView 枚举来强制从 32 位视图读取。但我猜你提到的注册表设置与安装程序有关。

实际上,您描述的场景是我如何部署我的应用程序。因为我将 32 位和 64 位版本都部署到同一台机器上,并且因为它们共享一些文件,所以我将所有内容都安装到 32 位程序文件中。然后所有的注册表访问都是 32 位视图。如果您希望 32 位和 64 位版本在注册表的重定向部分中共享相同的值,则确实没有其他选择。

于 2013-09-05T19:26:06.547 回答