Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查Visual C++;是否已使用WiX引导程序安装2013可再发行版本?_Wix_Bootstrapper_Redistributable_Visual C++ 2013 - Fatal编程技术网

如何检查Visual C++;是否已使用WiX引导程序安装2013可再发行版本?

如何检查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

我正在尝试为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"/>

所以问题是:产品代码应该是什么

在谷歌没有帮助我之后,我试图提取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包已经在做这个检查了,如果您只是运行它们(如果需要,使用适当的命令行以静默方式运行),如果它们不需要做任何事情,它们就会悄悄地离开。