我有一个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
答案 0 :(得分:1)
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'注释。