【问题标题】:How to install VC++ 2005 Redistributable x64 and x86 silently with WIX如何使用 WIX 静默安装 VC++ 2005 Redistributable x64 和 x86
【发布时间】:2015-10-11 01:44:31
【问题描述】:

我正在编辑 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 软件许可条款对话框。我想阻止弹出对话框。
欢迎任何建议。谢谢。

【问题讨论】:

  • 就在我的脑海中,但根据 msiexec 文档,静默安装的开关是“/qn”,可能用“/qn”而不是“/q”替换您的 InstallCommand?跨度>

标签: wix bootstrapper vcredist


【解决方案1】:

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

【讨论】:

  • 您的解决方案如我所愿。这就是我想要的。谢谢!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 2016-10-13
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2020-09-25
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多