如何检查Visual C++;是否已使用WiX引导程序安装2013可再发行版本?
我正在尝试为WiX安装程序创建一个引导程序。我需要安装VC++2013可再发行软件包(适用于x86和x64平台)。如果这些软件包已经安装,我想跳过它们的安装。为此,我为每个包向product.xml添加了以下元素:如何检查Visual C++;是否已使用WiX引导程序安装2013可再发行版本?,wix,bootstrapper,redistributable,visual-c++-2013,Wix,Bootstrapper,Redistributable,Visual C++ 2013,我正在尝试为WiX安装程序创建一个引导程序。我需要安装VC++2013可再发行软件包(适用于x86和x64平台)。如果这些软件包已经安装,我想跳过它们的安装。为此,我为每个包向product.xml添加了以下元素: <InstallChecks> <MsiProductCheck Property="IsMsiInstalled" Product="{?????????????????????????}"/> </InstallChecks&g
<InstallChecks>
<MsiProductCheck
Property="IsMsiInstalled"
Product="{?????????????????????????}"/>
</InstallChecks>
<Commands>
<Command PackageFile="vcredist_2013_x86.exe">
<InstallConditions>
<BypassIf Property="IsMsiInstalled" Compare="ValueGreaterThan" Value="0"/>
所以问题是:产品代码应该是什么
在谷歌没有帮助我之后,我试图提取vcredist_2013_x86.exe并查看msi文件属性,但这是另一个问题。使用7Zip解压后,我只得到了一堆名称奇怪的文件,如:“0”、“u0”、“u1”、“u2”等。文件“0”原来是刻录清单。它包含产品代码:对于x86:{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E}
,对于x64:{A749D8E6-B613-3BE3-8F5F-045C84EBA29B}
。所以我试着用它们,但运气不好<代码>MsiProductCheck返回-1,尽管安装了软件包
然后我查看了HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall注册表项中发生的更改(我正在使用Win8.1)。安装期间添加的键和卸载后删除的键不同:{ce085a78-074e-4823-8dc1-8a721b94b76d}
用于x86,而{7f51bdb9-ee21-49ee-94d6-90afc321780e}
用于x64。但是他们也没有使用MsiProductCheck
。即使安装了,结果仍然是-1(未知产品)
所以我现在绝望了。我唯一的想法是使用
RegistryCheck
而不是MsiProductCheck
并在卸载中检查密钥。但我想知道这里有什么问题。VC++2013可再发行版本应使用什么产品代码?为什么在软件包安装过程中添加的唯一密钥不适用于MsiProductCheck
?您应该使用来安装可再发行的,而不是.exe。如果已安装合并模块,则合并模块将正确处理所有内容。合并模块的问题是我需要x86和x64软件包,但Wix不允许我为不同平台添加模块。现在,您遇到了另一个问题。MSI不允许将x86和x64的安装程序包构建到同一个安装程序中。您应该有两个独立的安装程序,并使用Burn或其他引导程序安装正确的安装程序。你需要检查是什么意思还不清楚。redist包已经在做这个检查了,如果您只是运行它们(如果需要,使用适当的命令行以静默方式运行),如果它们不需要做任何事情,它们就会悄悄地离开。