我正在尝试为WiX安装程序创建一个引导程序。我需要安装VC ++ 2013可再发行组件包(适用于x86和x64平台)。如果已安装这些软件包,我想跳过这些软件包的安装。为此,我为每个包添加了product.xml的下一个元素:
<InstallChecks>
<MsiProductCheck
Property="IsMsiInstalled"
Product="{?????????????????????????}"/>
</InstallChecks>
<Commands>
<Command PackageFile="vcredist_2013_x86.exe">
<InstallConditions>
<BypassIf Property="IsMsiInstalled" Compare="ValueGreaterThan" Value="0"/>
所以问题是:产品代码应该是什么?
在Google没有帮助我之后,我尝试提取vcredist_2013_x86.exe并查看msi文件属性,但这是另一个问题。在使用7Zip提取它之后,我只得到一堆奇怪名字的文件,例如:&#34; 0&#34;,&#34; u0&#34;,&#34; u1&#34;,&#34; u2&#34 ;等文件&#34; 0&#34;原来是Burn清单。它包含产品代码:for x86:{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E}
和x64:{A749D8E6-B613-3BE3-8F5F-045C84EBA29B}
。所以我试着用它们但没有运气。尽管安装了软件包,MsiProductCheck
仍返回-1。
然后我查看了HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall注册表项(我在Win8.1上工作)发生了什么变化。安装期间添加的密钥和卸载后删除的密钥不同:x86为{ce085a78-074e-4823-8dc1-8a721b94b76d}
,x64为{7f51bdb9-ee21-49ee-94d6-90afc321780e}
。但他们也没有与MsiProductCheck
合作。即使安装了它们,它的结果仍然是-1(未知产品)。
所以我现在绝望了。我唯一的想法是使用RegistryCheck
而不是MsiProductCheck
并检查卸载中的密钥。但我想知道这里有什么问题。 VC ++ 2013可再发行组件应使用哪些产品代码?为什么在软件包安装过程中添加的唯一密钥不适用于MsiProductCheck
?