使用32位MSI在64位Windows上安装“AnyCPU”程序有什么危害

本文关键字:程序 AnyCPU 什么 安装 MSI 32位 64位 Windows 使用 | 更新日期: 2023-09-27 18:30:29

我的应用程序是使用" 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 以解析到正确的位置是不值得的。只要我的程序仍然在 64 位 Windows 上运行 64 位,我真的不在乎它默认安装在"C:''Program Files (x86)"中,并且一些注册表值存在于 Wow6432Node 处。

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

使用32位MSI在64位Windows上安装“AnyCPU”程序有什么危害

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

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