安装" AnyCPU"的危害是什么?使用32位MSI在64位Windows上编程?

时间:2013-09-05 18:13:48

标签: c# wix

我的应用程序是使用“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。我试图避免的 - 对我来说,仅为[ProgramFilesFolder]单独的64位MSI和解决纠正位置的regsitry路径是不值得的。只要我的程序在64位Windows上仍然运行64位,我并不关心它默认安装在“C:\ Program Files(x86)”并且{{1}处存在一些注册表值}。

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

1 个答案:

答案 0 :(得分:3)

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

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