WIX如何知道它是否安装32位或64位软件?

时间:2018-04-12 09:42:16

标签: windows windows-installer 32bit-64bit wix3.7

我有一个WIX安装程序,可以创建一些注册表项并安装一些软件。我不使用package - 元素属性“平台”,也不使用a = '\'redis_import\':\'start\',\'redis_import\':\'dim_user_level\'' print(', '.join([':'.join(reversed(i.split(':'))) for i in a.split(',')])) # "'start':'redis_import', 'dim_user_level':'redis_import'" 的{​​{1}}开关。

我弄清楚为什么它将软件复制到-arch而不是candle.exe:显然,使用C:\Program Files (x86)\Vendor\Product会自动重定向到32位软件路径:

C:\Program Files\Vendor\Product

但我找不到与注册表项类似的东西。 为什么WIX将注册表项从ProgramFilesFolder重定向到<Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <!-- 64 Bit Folder would be "ProgramFiles64Folder" --> <Directory Id="Vendor" Name="Vendor"> <Directory Id="INSTALLDIR" Name="Product"> ? 为什么WIX认为我不安装32位软件?

示例:此代码在Software\Vendor\Product

中创建注册表项
Software\WOW6432Node\Vendor\Product

1 个答案:

答案 0 :(得分:1)

如果省略Platform属性和-arch开关,则

x86(32位)是默认值。一旦MSI被编译,它将使用32位位置,无论您的文件被编译为什么。它不知道你的文件中有什么。

我不从命令行做蜡烛/灯光,我使用Visual Studio集成(Votive)/ MSBuild。在这种情况下,解决方案配置管理器及其x86(默认)和x64的解决方案/项目平台会自动驱动-arch开关。

因为.NET应用程序将JIT任何CPU,无论它安装在何处,我很少创建x64特定的安装程序,所以在大多数情况下我忽略了这一点。有时候,我需要安装和/或注册一个非托管组件到SystemFolder然后我关心。

您需要1)像我在visual studio中那样做2)在构建过程中传递-arch属性或3)将Package属性设置为x64并忽略'this as asours'd'注释。