代码之家  ›  专栏  ›  技术社区  ›  subjectivist

如何防止Windows在重新启动之前执行安装?

  •  2
  • subjectivist  · 技术社区  · 7 年前

    我正在测试安装脚本,必须将Windows置于另一个安装的重启挂起状态。我已经阅读了如何测试是否需要重新启动。设置需求的正确方法尚不明确。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Stein Åsmul    7 年前

    诚实的回答是:我不确定 。有许多不同的注册表位置表明需要重新启动。我只是想在这里列出一个特别的清单: How do I reference the Reboot Pending Property in Burn (WiX) 。我不确定是什么机制使用了它们,但可以想象,其中一些重新启动条目可能会导致进一步的安装被阻止。

    正如你所知 Windows更新 能够安排重启提示,不会停止或消失,也不允许安装更多软件(至少不允许安装Windows Installers)。我不熟悉用来触发这种情况的API,它们很可能是Microsoft自己的函数,只能由 信任安装程序 (Windows模块安装程序服务-用于安装Windows更新-能够替换文件 protected by Windows Resource Protection )。 只是一个理论 .如果我明天有时间,我会再看一看。

    中有功能 集团保险单 to disable Windows Installer by policy ,但如果我是你,我就不会走那条路。组策略很重,它不会阻止非MSI安装(据我所知)。我相信您已经找到了此选项。

    查看此脚本: Get-PendingReboot-Query ,SCCM部分似乎指出了“a” 硬重启 “”( $CCMClientSDK.IsHardRebootPending )。可能是指在重新启动之前不允许执行任何其他操作的重新启动? 如果您有可用的SCCM,这是我将调查的选项。 不幸的是,我在这个问题上没有跟上进度。也许试试你的运气 serverfault.com 甚至 superuser.com 系统管理员和超级用户潜伏在哪里?

        2
  •  1
  •   J.Tribbiani    7 年前

    我不建议您自动重新启动。您应该更好地通知用户,在继续安装之前,需要重新启动。

    如果要确保重新启动(任何重新启动)后安装程序都将运行,可以利用Run和RunOnce注册表项: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376977(v=vs.85).aspx

    基本上,如果您检测到重启挂起,那么在后面创建这些注册表,并通知用户应该首先重启机器。

    重新启动后,如果创建注册表,Windows将自动加载安装。

        3
  •  0
  •   monish_koppa    7 年前

    您可以在注册表中添加一个条目,根据该条目可以检查是否重新启动。或执行重新启动。

    尽管我建议您避免重新启动,如果可以的话。Windows installer会自动检测是否需要重新启动,并将指示是否需要重新启动。尽管你可以抑制它。

    有一个PendingRenameOperations注册表,它是在升级过程中需要重新启动以进行文件更新时设置的。在我们的产品中,我们检查此注册表项以及其他几个与产品相关的注册表项,然后向用户显示一条消息,说明是否需要重新启动。如果用户接受重新启动,则安装/升级将终止。

    同样的好文章: https://technet.microsoft.com/en-us/library/cc164360(v=exchg.80).aspx