Windows WIX如何知道安装的是32位还是64位软件?

Windows WIX如何知道安装的是32位还是64位软件?,windows,windows-installer,32bit-64bit,wix3.7,Windows,Windows Installer,32bit 64bit,Wix3.7,我有一个WIX安装程序,它可以创建一些注册表项并安装一些软件。我不使用-elements属性平台,也不使用candle.exe的-arch开关 我明白了为什么它会将软件复制到C:\Program Files x86\Vendor\Product而不是C:\Program Files\Vendor\Product:显然,使用ProgramFilesFolder会自动重定向到32位软件路径: <Directory Id="TARGETDIR" Name="SourceDir">

我有一个WIX安装程序,它可以创建一些注册表项并安装一些软件。我不使用-elements属性平台,也不使用candle.exe的-arch开关

我明白了为什么它会将软件复制到C:\Program Files x86\Vendor\Product而不是C:\Program Files\Vendor\Product:显然,使用ProgramFilesFolder会自动重定向到32位软件路径:

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder"> <!-- 64 Bit Folder would be "ProgramFiles64Folder" -->
        <Directory Id="Vendor" Name="Vendor">
            <Directory Id="INSTALLDIR" Name="Product">

如果省略平台属性和-arch开关,则默认为x86 32位。一旦MSI被编译,它将使用32位的位置,不管你的文件编译成什么。它不知道你的档案里有什么

我不使用命令行中的烛光,而是使用VisualStudioIntegrationVoctive/MSBuild。在这种情况下,solution configuration manager及其x86 default和x64的解决方案/项目平台会自动驱动-arch开关

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


在生成过程中,您需要1像我在visual studio 2 pass-arch属性中那样执行操作,或者3将Package属性设置为x64并忽略“this is dis劝阻”注释。

我不知道x86是默认值,并且在将x64作为平台属性添加到Package元素时,我没有看到任何差异,不确定原因。但是在命令行中将-arch x64赋予candle.exe是可行的。谢谢我只使用了Voctive,因此可能msbuild目标正在提取平台属性,并使用它将-arch传递给candle。我知道蜡烛和光,还有什么不知道的,很多人喜欢这样做。给他们visual studio代码和命令提示符,他们会很高兴。就我个人而言,我更喜欢VS/Voctive/MSBuild路线,并创建了一个开源项目,其中包含了更完整的项目模板和图形设计器。我的wixxml只有大约1%是手工编辑的,我只在需要使用heat获取一些COM元数据时才花时间在命令行上。
<RegistryKey Root="HKLM"
    Key="Software\Apache Software Foundation\Procrun 2.0\$(var.serviceName)\Parameters"
    ForceDeleteOnUninstall="yes">
    <RegistryValue Key="Java" Name="Classpath" Type="string" Value="[JettyHomeDirectory]start.jar"/>