2

我正在尝试为 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 解压后,我只得到了一堆名称奇怪的文件,例如:“0”、“u0”、“u1”、“u2”等。文件“0”原来是刻录清单。它包含产品代码:for x86:{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E}和 for x64: {A749D8E6-B613-3BE3-8F5F-045C84EBA29B}。所以我尝试使用它们,但没有运气。MsiProductCheck尽管安装了软件包,但返回 -1。

然后我查看了 HKEY_LOCAL_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

4

0 回答 0