TL; DR 是一个由多个安装程序组成的链,用于自动调用VS 2017 vc_redist
的明智方法是什么?
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
时,如果 prior 挂载到此安装程序,它将返回MSI退出代码3010
,表示需要重新启动。
,FAIK,此退出代码也表示,此设置需要重新启动才能完成。
因此,我无法区分该安装程序是否成功,并且仅在安装顺序的最后(我确实在安装之前和之后安装过其他东西)之后才需要重新启动-或安装程序是否真的拒绝执行任何操作,我需要重新启动系统并重新启动该安装程序!
如何在一系列不同的第三方安装程序中将此vc_redist命名为
不确定这些问题,但出于完整性考虑。
“未采取任何行动,因为需要重新启动系统。”
这是我们的“产品套件”的InnoSetup内置安装程序,将由客户使用,安装顺序如下:
从此序列中可以看到,每个vcredist都将疯狂后重新启动,幸运的是,到目前为止,似乎只有2017年的redist表现出这种不幸的行为。
的注释:我的试用版在我的开发机上运行,所有启动均已在“步骤0”处进行了重启,并且VC2005和VC2010安装程序都运行良好(通过其GUI进度进行了验证) ),即使事先没有重启 。如果挂起重启,则VC2017安装程序将拒绝执行任何操作。
答案 0 :(得分: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文件(由Windows Update使用的 *.msu
)组成,而不仅仅是MSI文件。 我怀疑它们可能被设计为在允许安装之前需要重新启动,但我没有证据。
建议 :运行检查以确保已安装 KB2999226 。这该怎么做?我不知道Win32电话,但是WiX家伙可能会知道。 Here are some other suggestions。
实际的Windows Update文件是(随着时间的推移,这些文件名可能会随着具有无版本文件名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
文件 可用的分配机制-可能是- 示例SCCM-在安装vc_redist.x64.exe
软件包之前。当您直接从MSU本身获取错误消息时,这应该可以更好地控制分发过程。
坦率地说,这些是SOE的核心组成部分。我不知道为什么Microsoft将这些运行时保留在主要的OS安装之外。它们对于大多数软件都至关重要。
可以在以下位置找到使用WiX工具包的 dark.exe
二进制文件进行反编译方法的描述:How can I compare the content of two (or more) MSI files?
答案 1 :(得分:1)
严格来说,错误3010是成功的结果。这意味着安装已完成,但需要重新启动。我不知道有什么迹象表明安装根本没有开始。典型的“如果挂起重新启动将不会安装”是基于MsiSystemRebootPending属性使用启动条件的结果。由于此启动条件而导致的失败不会返回3010结果-它们通常会返回1602错误,这是一种“用户取消”错误。