使用 Wix Installer 检查是否安装了 VC2015 运行时但归档以查找 32 位或 64 位
Checking VC2015 runtime Installed or not with Wix Installer But Filing to find 32bit or 64bit
<Property Id="VC2015_X86">
<RegistrySearch Id="VC2015_X86"
Root="HKLM"
Key="SOFTWARE\Wow6432Node\Microsoft\DevDiv\vc\Servicing.0\RuntimeAdditional"
Name="Version"
Type="raw"
/>
</Property>
属性 由本次搜索设置。但它在 32 位上失败,因为 Wow6432Node 搜索。
但是 Wix Doc 中的 RegistrySearch 元素说
Win64 YesNoType 当值为 'yes' 时,指示搜索在 64 位注册表中查找。当值为 'no' 时,搜索将在 32 位注册表中查找。默认值基于由 -arch 开关设置为 candle.exe 或 .wixproj MSBuild 项目中的 InstallerPlatform 属性 的平台:对于 x86 和 ARM,默认值为 'no'。对于 x64 和 IA64,默认值为 'yes'.
如果我按以下方式更改它,它可以在 32 位和 64 位上运行吗?
<Property Id="VC2015_X86">
<RegistrySearch Id="VC2015_X86"
Root="HKLM"
Key="SOFTWARE\Microsoft\DevDiv\vc\Servicing.0\RuntimeAdditional"
Name="Version"
Type="raw"
/>
</Property>
您的更改已完成一半。尽管 Redistributing Visual C++ Files 上有隐含的指导,但我建议您避免直接引用 Wow6432Node 密钥。相反,您应该使用任何可用的方法来指定 32 位注册表视图。 (为了更好地理解 32 位注册表视图的概念,请比较 64 位计算机上的常规 C:\Windows\System32\regedit.exe 和 C:\Windows\SysWow64\regedit.exe。)
在您的情况下,要查找 32 位 redist 的存在,这意味着使用其 32 位视图名称 (Key="SOFTWARE\Microsoft\DevDiv\vc\Servicing.0\RuntimeAdditional"
) 指定密钥,并明确指定 Win64="No"
所以搜索将在项目的 32 位或 64 位版本中使用配置单元的 32 位视图。
如果您还想在 64 位机器上找到 64 位 redist,您应该将第二个搜索添加到另一个 属性,并且,根据您对 32 位构建的需要,要么明确指定 Win64="Yes"
或确保搜索仅包含在项目的 64 位构建中。很可能您不需要同时搜索这两者,因为任何给定的 .exe 或 .dll 都将仅取决于 32 位或 64 位 redists 的一个位数。
<Property Id="VC2015_X86">
<RegistrySearch Id="VC2015_X86"
Root="HKLM"
Key="SOFTWARE\Wow6432Node\Microsoft\DevDiv\vc\Servicing.0\RuntimeAdditional"
Name="Version"
Type="raw"
/>
</Property>
属性 由本次搜索设置。但它在 32 位上失败,因为 Wow6432Node 搜索。
但是 Wix Doc 中的 RegistrySearch 元素说 Win64 YesNoType 当值为 'yes' 时,指示搜索在 64 位注册表中查找。当值为 'no' 时,搜索将在 32 位注册表中查找。默认值基于由 -arch 开关设置为 candle.exe 或 .wixproj MSBuild 项目中的 InstallerPlatform 属性 的平台:对于 x86 和 ARM,默认值为 'no'。对于 x64 和 IA64,默认值为 'yes'.
如果我按以下方式更改它,它可以在 32 位和 64 位上运行吗?
<Property Id="VC2015_X86">
<RegistrySearch Id="VC2015_X86"
Root="HKLM"
Key="SOFTWARE\Microsoft\DevDiv\vc\Servicing.0\RuntimeAdditional"
Name="Version"
Type="raw"
/>
</Property>
您的更改已完成一半。尽管 Redistributing Visual C++ Files 上有隐含的指导,但我建议您避免直接引用 Wow6432Node 密钥。相反,您应该使用任何可用的方法来指定 32 位注册表视图。 (为了更好地理解 32 位注册表视图的概念,请比较 64 位计算机上的常规 C:\Windows\System32\regedit.exe 和 C:\Windows\SysWow64\regedit.exe。)
在您的情况下,要查找 32 位 redist 的存在,这意味着使用其 32 位视图名称 (Key="SOFTWARE\Microsoft\DevDiv\vc\Servicing.0\RuntimeAdditional"
) 指定密钥,并明确指定 Win64="No"
所以搜索将在项目的 32 位或 64 位版本中使用配置单元的 32 位视图。
如果您还想在 64 位机器上找到 64 位 redist,您应该将第二个搜索添加到另一个 属性,并且,根据您对 32 位构建的需要,要么明确指定 Win64="Yes"
或确保搜索仅包含在项目的 64 位构建中。很可能您不需要同时搜索这两者,因为任何给定的 .exe 或 .dll 都将仅取决于 32 位或 64 位 redists 的一个位数。