3

我正在编辑 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 安装程序对话框并显示:“正在安装另一个程序。请等待安装完成,然后再次尝试安装此软件。”
似乎这两个 Redistributable 有冲突(注意,执行时,例如 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>

使用刻录,不会发生冲突,但无法静默安装它们,即在启动引导程序后,会出现 Microsoft 软件许可条款对话框。我想防止弹出对话框。
欢迎任何建议。谢谢你。

4

2 回答 2

1

以下几乎按照您的要求工作:无人值守,因此没有许可证查询,但不是完全静默,因此您在安装 VS2005 依赖项时会短暂看到弹出窗口。可能会进一步增强,但开关似乎没有得到适当的尊重。

无论如何,首先vcredist_x86.exe使用 7-Zip 或其他软件解压缩(或 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>

这个链接帮助了我。

于 2015-10-09T11:56:52.430 回答
0

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

所以这真的归结为一个烧伤问题,这应该是有效的,所以这就是前进的方向,对不起,我不能帮助这部分。

于 2015-10-10T17:44:31.010 回答