WIX 如何知道它安装的是 32 位还是 64 位软件?
How does WIX know if it's installing 32 or 64 Bit software?
我有一个 WIX 安装程序,可以创建一些注册表项并安装一些软件。我不使用 package-elements 属性 "Platform",也不使用 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">
但是我找不到类似的注册表项。
为什么 WIX 将注册表项从 Software\Vendor\Product
重定向到 Software\WOW6432Node\Vendor\Product
?
为什么 WIX 认为我安装了 32 位软件,而我没有?
示例:此代码在 Software\WOW6432Node\Apache Software Foundation\Procrun 2.0\...
中创建注册表项
<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"/>
如果省略 Platform 属性和 -arch 开关,则 x86(32 位)是默认值。一旦 MSI 被编译,它将使用 32 位位置,而不管您的文件被编译成什么。它不知道你的文件里有什么。
我不从命令行执行 candle/light,我使用 Visual Studio 集成 (Votive) / MSBuild。在这种情况下,解决方案配置管理器及其 solution/project x86(默认)和 x64 平台会自动驱动 -arch 开关。
因为 .NET 应用程序会 JIT 任何 CPU 而不管它安装到哪里,我很少创建特定于 x64 的安装程序,所以在大多数情况下我忽略了这一点。有时,我需要安装 and/or 将非托管组件注册到 SystemFolder 然后我会关心。
您需要 1) 像我在 visual studio 中做的那样 2) 在构建期间传递 -arch 属性 或 3) 将 Package 属性设置为 x64 并忽略 'this is discouraged' 评论。
我有一个 WIX 安装程序,可以创建一些注册表项并安装一些软件。我不使用 package-elements 属性 "Platform",也不使用 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">
但是我找不到类似的注册表项。
为什么 WIX 将注册表项从 Software\Vendor\Product
重定向到 Software\WOW6432Node\Vendor\Product
?
为什么 WIX 认为我安装了 32 位软件,而我没有?
示例:此代码在 Software\WOW6432Node\Apache Software Foundation\Procrun 2.0\...
<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"/>
x86(32 位)是默认值。一旦 MSI 被编译,它将使用 32 位位置,而不管您的文件被编译成什么。它不知道你的文件里有什么。
我不从命令行执行 candle/light,我使用 Visual Studio 集成 (Votive) / MSBuild。在这种情况下,解决方案配置管理器及其 solution/project x86(默认)和 x64 平台会自动驱动 -arch 开关。
因为 .NET 应用程序会 JIT 任何 CPU 而不管它安装到哪里,我很少创建特定于 x64 的安装程序,所以在大多数情况下我忽略了这一点。有时,我需要安装 and/or 将非托管组件注册到 SystemFolder 然后我会关心。
您需要 1) 像我在 visual studio 中做的那样 2) 在构建期间传递 -arch 属性 或 3) 将 Package 属性设置为 x64 并忽略 'this is discouraged' 评论。