3

TL;DRvc_redist在多个安装程序链中调用 VS 2017 时,自动调用 VS 2017 的明智方法是什么?


MS 为 VS 15.x(VS 2017)提供的Visual C++ Redistributable Installer ,即两者(14.15.26706 - VS 15.8.4)):

  • vc_redist.x86.exe
  • vc_redist.x64.exe

作为我们完整产品安装的一部分,我必须静默运行几个vcredist 安装程序(也是旧版本)。

现在的问题是,如果重新启动未决(例如) ,这些安装程序将拒绝安装"HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" - PendingFileRenameOperations

当使用 调用这些安装程序时vc_redist /q,它们甚至会立即触发系统重启。这可以通过调用它们来解决/q /norestart,但是:

调用时,如果在此安装程序之前vc_redist /q /norestart重启等待,它将返回 MSI 退出代码,指示需要重启。3010

但是,AFAIK,此退出代码表明,此设置需要重新启动才能完成。

实际问题

因此,我无法区分此安装程序是否成功并且只需要在我的安装序列的最后重新启动(我确实在之前和之后安装了 otehr 东西) -或者安装程序是否实际上拒绝执行任何操作并且我需要重新启动系统并再次启动此安装程序!

如何在不同的第三方安装程序链中调用此 vc_redist 和

  • 理想情况下,最后只需要重新启动一次
  • 至少,确定它是否安装成功。

一些额外的信息,fwiw:

不确定这些对问题有帮助,但为了完整起见。

  • 安装程序 GUI 清楚地指示正在发生的事情:(抱歉,德语 Windows)

弹出框

“没有采取任何行动,因为需要重新启动系统。”

摘要/关闭/重启

  • 这是我们的“产品套件”的 InnoSetup 内置安装程序,将供客户使用,安装顺序如下:

    1. 运行 MSVC 2005 (VC8) 32 位 vcredist
    2. 运行 MSVC 2010 (VC10) 32 位 vcredist
    3. 运行 MSVC 2017 (VC141) 64 位 vcredist
    4. 运行 MSVC 2017 (VC141) 32 位 vcredist
    5. 运行其他一些第三方依赖/库安装程序
    6. 安装实际的应用程序文件(通过 InnoSetup)
    7. 重新启动(询问)是否有任何安装程序指示需要重新启动。

正如你从这个序列中看到的那样,每次 vcredist 之后重新启动都会很疯狂,幸运的是,到目前为止,似乎只有 2017 年的 redist 表现出这种不幸的行为。

注意:我的开发机器上运行的试用版都是从“步骤 0”处已经挂起的重新启动开始的,即使重新启动在手之前等待重新启动,VC2005 和 VC2010 安装程序都运行良好(通过它们的 GUI 进度验证。如果重新启动未决,则 VC2017 安装程序拒绝执行任何操作。

4

2 回答 2

1

严格来说,error 3010 是成功的结果。这意味着安装已完成,但需要重新启动。我不知道有任何迹象表明这意味着安装根本没有开始。典型的“如果重新启动挂起将不会安装”是使用基于 MsiSystemRebootPending 属性的启动条件的结果。由于此启动条件导致的失败不会返回 3010 结果 - 它们通常会返回 1602 错误作为一种“用户取消”错误。

于 2018-10-16T20:05:56.020 回答
1

MSU 软件包:在反编译后vc_redist.x64.exe- 这是一个 WiX 包 - 使用以下命令:

dark.exe -x Extract vc_redist.x64.exe

我发现捆绑包安装:Update for Universal C Runtime in Windows - KB2999226。该组件由Windows Update 文件*.msu由 Windows Update 使用)组成,而不仅仅是 MSI 文件。我怀疑它们可能被设计为在允许安装之前需要重新启动,但我没有证据

建议:运行检查以确保安装了KB2999226。这个怎么做?我不知道 Win32 调用,但 WiX 家伙可能会知道。这里有一些其他的建议


实际的 Windows 更新文件是(随着时间的推移,这些文件名可能会随着具有无版本文件名的安装程序的新版本 - vc_redist.x64.exe- 的发布而改变):

  • Windows6.0-KB2999226-x64.msu
  • Windows6.1-KB2999226-x64.msu
  • Windows8.1-KB2999226-x64.msu
  • Windows8-RT-KB2999226-x64.msu

换句话说,对于 Vista、Windows 7、Windows 8 等。各种服务器操作系统也是如此。Windows 10 内置了这个组件。

企业部署:在企业环境中,我会软件包*.msu之前通过可用的分发机制部署这些文件——无论它是什么——例如 SCCMvc_redist.x64.exe

当您直接从 MSU 本身收到错误消息时,这应该可以更好地控制分发过程。

坦率地说,在我看来,这些都是核心 SOE 组件。我不知道为什么微软将这些运行时排除在主操作系统安装之外。它们对于大多数软件至关重要。


dark.exe可以在此处找到使用 WiX 工具包二进制文件的反编译方法的描述:如何比较两个(或多个)MSI 文件的内容?

于 2018-10-11T10:43:44.350 回答