使用 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 的一个位数。