visual-studio-2017 - 如何防止 vc_redist.x##.exe (VS2017) 由于挂起的重新启动而出现模棱两可的失败?
问题描述
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 内置安装程序,将供客户使用,安装顺序如下:
- 运行 MSVC 2005 (VC8) 32 位 vcredist
- 运行 MSVC 2010 (VC10) 32 位 vcredist
- 运行 MSVC 2017 (VC141) 64 位 vcredist
- 运行 MSVC 2017 (VC141) 32 位 vcredist
- 运行其他一些第三方依赖/库安装程序
- 安装实际的应用程序文件(通过 InnoSetup)
- 重新启动(询问)是否有任何安装程序指示需要重新启动。
正如你从这个序列中看到的那样,每次 vcredist 之后重新启动都会很疯狂,幸运的是,到目前为止,似乎只有 2017 年的 redist 表现出这种不幸的行为。
注意:我的开发机器上运行的试用版都是从“步骤 0”处已经挂起的重新启动开始的,即使重新启动在手之前等待重新启动,VC2005 和 VC2010 安装程序都运行良好(通过它们的 GUI 进度验证)。如果重新启动未决,则 VC2017 安装程序拒绝执行任何操作。
解决方案
严格来说,error 3010 是成功的结果。这意味着安装已完成,但需要重新启动。我不知道有任何迹象表明这意味着安装根本没有开始。典型的“如果重新启动挂起将不会安装”是使用基于 MsiSystemRebootPending 属性的启动条件的结果。由于此启动条件导致的失败不会返回 3010 结果 - 它们通常会返回 1602 错误作为一种“用户取消”错误。
推荐阅读
- typescript - 将具有可为空字符串属性的接口转换为字符串属性
- x86 - x86 UEFI 引导:UEFI 真的需要从地址 0 开始的传统 1MiB 填充吗?
- python - Python Flask 导入文件无法解析
- typescript - 将对象数组转换/转换为对象接口在打字稿中扩展的父接口的正确方法是什么?
- systemd - 将 sd-bus 事件移植到 libev
- woocommerce - 在 woocommerce 比较页面上显示属性选项
- python - 如何创建任意深度 D 的嵌套列表,其中每个条目包含 D-1 个列表
- dialogflow-es - 谷歌动作模拟器无法访问我的网络服务器
- r - 一个因素的意大利面条图
- python - 如何找到两个数组之间的第一个交点?