2013-09-05 146 views
11

我的应用程序使用“Any CPU”配置构建。该应用程序的WIX安装程序使用platform=x86构建,因此生成的MSI为32位。使用32位MSI在64位Windows上安装“AnyCPU”程序有什么危害?

当我在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

所以,我的问题是,当我在64位Windows上使用默认的32位MSI安装“AnyCPU”程序时,会出现其他的后果,installDir是“C:\ Program Files(x86 )“和一些注册表值存储在Wow6432Node

+1

你是否正在注意存储在Wow6432Node中的任何注册表设置正在被您的程序读取而不是原生位置(如果您正在读取它们)? –

+0

为什么不建立这两个,并有32位版本检测64位操作系统,然后执行Setup64.exe并退出如果是true? –

+0

@Scott Chamberlin,我只在注册表中安装了一个值。在64位运行时强制从Wow6432Node读取C#代码比创建另一个安装程序更容易。 – sean717

回答

2

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

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

相关问题