如何使用WIX静默安装VC ++ 2005 Redistributable x64和x86

时间:2015-09-08 02:57:19

标签: wix bootstrapper vcredist

我正在编辑WIX的安装项目(Windows Installer XML),并希望使用WIX静默安装VC ++ Redistributables(2005x86,2005x64)。
我在下面显示的代码中使用自定义操作:

<Product ...>
  <CustomAction Id="vcredist2005x64" ExeCommand="/q" Execute="deferred"
   Return="asyncNoWait" Impersonate="no">
  <CustomAction Id="vcredist2005x86" ExeCommand="/q" Execute="deferred"
   Return="asyncNoWait" Impersonate="no">
</Product>
...
<Fragment>
  <InstallExecuteSequence>
    <Custom Action="vcredist2005x64" Before="InstallFinalize">NOT Installed</Custom>
    <Custom Action="vcredist2005x86" After="vcredist2005x64">NOT Installed</Custom>
  </InstallExecuteSequence>
</Fragment>

然后,执行从上面的代码生成的安装程序时,会弹出一个Windows Installer对话框并说:&#34;正在安装另一个程序。请等待安装完成,然后再次尝试安装此软件。&#34;
似乎两个Redistributables是冲突的(请注意,在执行时,例如,2013x64和2005x64,不会发生冲突,它们会以静默方式安装)。

然后我切换到使用Bootstrapper Project(Burn)并编写下面的代码:

<Bundle ...>
  <Chain>
    <ExePackage Id="vcredist2005x64" SourceFile="C:\path\to\vcredist_x64.exe"/>
    <ExePackage Id="vcredist2005x86" SourceFile="C:\path\to\vcredist_x86.exe"/>
  </Chain>
</Bundle>
...
<Fragment>
  <PackageGroup Id="vcredist">
    <ExePackage Id="vcredist2005x64"
                Cache="yes" PerMachine="yes" Permanent="yes" Vital="yes" Compressed="yes"
                SourceFile="C:\path\to\vcredist_x64.exe"
                InstallCommand="/q"
                SuppressSignatureVerification="yes"
                Protocol="burn"
                />
    <ExePackage Id="vcredist2005x86" ... />  <!-- same as above -->
  </PackageGroup>
</Fragment>

使用Burn时,不会发生冲突,但无法安装静默,即启动Bootstrapper后,会出现Microsoft软件许可条款对话框。我想阻止对话框弹出。
欢迎任何建议。谢谢。

2 个答案:

答案 0 :(得分:0)

以下几乎正如您所说的那样:它是无人值守,因此没有许可证查询但是它不是完全无声,因此您在安装VS2005依赖项时会简要地看到弹出窗口。可能会进一步增强,但转换似乎没有得到适当的尊重。

无论如何,首先使用7-Zip或其他软件解压缩vcredist_x86.exe(或x64)以检索内部VCREDI~3.EXE。删除原始文件并将后者重命名为vcredist_x86.exe(或x64)。使用此WiX套装后:

  <Bundle>

    <!-- ... -->

    <Chain>
      <ExePackage Id="vcredist2005x86" SourceFile="D:\vcredist_x86.exe"/>
    </Chain>
  </Bundle>

  <Fragment>
    <PackageGroup Id="vcredist">
      <ExePackage Id="vcredist2005x86"
                  Cache="yes" PerMachine="yes" Permanent="yes" Vital="yes" Compressed="yes"
                  SourceFile="D:\vcredist_x86.exe"
                  InstallCommand="/Q /C:&quot;msiexec /i vcredist.msi /qn&quot;"
                  SuppressSignatureVerification="yes"
                  Protocol="burn"
                />
    </PackageGroup>
  </Fragment>

link帮助了我。

答案 1 :(得分:0)

这些可再发行组件是基于MSI的安装。 Windows不允许递归MSI操作,因此您在安装它时会收到错误,因为另一个安装已经运行 - 您可以从中调用自定义操作。

所以这真的归结为一个Burn问题,那应该是有效的,这样才能进入,抱歉我无法帮助解决这个问题。