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

How to install VC++ 2005 Redistributable x64 and x86 silently with WIX

我正在编辑 WIX 的安装项目(Windows 安装程序 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 安装程序对话框并显示:"Another program is being installed. Please wait until that installation is complete, and then try installing this software again."
好像是两个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 软件许可条款对话框。我想阻止对话框弹出。
欢迎任何建议。谢谢。

以下几乎按你的要求工作:它是无人值守,所以没有许可证查询但它不是完全silent,所以你安装 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 帮助了我。

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

所以这真的归结为 Burn 问题,这应该有效,所以这就是前进的方向,抱歉,我无法帮助解决这部分问题。