如何检查visual c ++ 2013是否已安装在bootstrapper(wix)中?

时间:2017-08-17 10:28:52

标签: installation wix windows-installer wix3.6

我正在尝试使用bootstrapper安装visual c ++ 2013,因此在bundle标签中我使用以下代码安装visual c ++ 2013,如下所示

 <ExePackage Id="VC2013" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" SourceFile=".\vcredist_x862013.exe"  />

目前它将始终安装,无论是否安装,我如何检查是否安装?

1 个答案:

答案 0 :(得分:2)

在您的捆绑包中,添加以下行:

<util:RegistrySearch Id="VCRedistTest64" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID_HERE}" Result="exists" Variable="VCR64Present" Win64="yes"/>
<util:RegistrySearch Id="VCRedistTest32" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID_HERE}" Result="exists" Variable="VCR32Present" Win64="no"/>

将{GUID_HERE}标记替换为Visual C ++ 2013的正确GUID。要在具有Visual C ++安装程序的计算机上找到它,请打开注册表并导航到:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\

在此键中将有几个子键,其中每个子键对应于当前安装的一个软件包。找到与Visual C ++ 2013对应的密钥,并复制密钥名称,这是您需要在上面的代码中插入的GUID。

最后,将您的Exepackage元素更改为:

<ExePackage Id="VC2013" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" SourceFile=".\vcredist_x862013.exe"  DetectCondition="(VCR32Present OR VCR64Present)/>

这将允许Windows检测是否已安装Visual C ++,并将阻止安装程序重新安装它。

此外,将以下内容添加到顶级“Wix”标记:

xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"