【问题标题】:How can I force reboot after installation completion? Burn/bootstrapper in WiX安装完成后如何强制重启? WiX 中的刻录/引导程序
【发布时间】:2019-04-03 09:00:11
【问题描述】:

我使用 WIX 创建了一个包。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Bundle Name="ClientSoft" Version="1.0.0.0" Manufacturer="Tests" UpgradeCode="GUID">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />

        <Chain>
            <MsiPackage SourceFile="file1.msi" Visible="yes"/>
            <MsiPackage SourceFile="file2.msi" Visible="yes"/>
        </Chain>
    </Bundle>
</Wix>

我只安装 MSI 文件。捆绑包将使用 -silent 选项执行。

我想在捆绑包安装完成后强制重启(不提示)。

添加 -forcereboot 没有帮助。

安装完所有 MSI 文件后如何强制重启?

编辑:

“普通用户”不会使用系统,因此我不认为突然重启是不受欢迎的行为 - 突然重启正是我所需要的。

【问题讨论】:

  • 看看这个thread 并从 WiX 作者那里得到答案。将 ScheduleReboot 操作放入您的 MSI 之一。您还可以将 /forcerestart 选项与 msiexec 一起使用
  • 我明白了。我希望有一个更清晰的解决方案来解决这个问题,因为将重置放在 MSI 文件中可能会使捆绑行为有点模糊。
  • Maybe have a read on the RestartManager featurevery detailed。总体思路是重新启动应用程序而不是系统。仅供参考。
  • 将一个 ExePackage 添加到您的链中。制作一个可执行任何操作并返回您想要的任何退出代码的 exe。

标签: wix bootstrapper burn


【解决方案1】:

Burn 重启通知:据我所知,如果任何嵌入式 MSI 文件安排重启(可以通过安排标准操作 ScheduleRebootForceReboot - 如果在安装期间无法替换文件,Windows Installer 将自行安排重新启动)。

我相信 Burn 捆绑包会在安装完成之前处理抑制重新启动的问题 - 通过他们用来调用每个 MSI 的命令行,但我不能 100% 确定。 ForceReboot 可能存在特殊问题。 只需使用 ScheduleRebootcondition it well - as explained here

此外,如果正在等待重新启动,整个捆绑包似乎拒绝卸载。不确定当捆绑包以静默模式运行时会发生什么,它似乎启动了失败的重新启动。没有测试太彻底。

等待一些测试。需要先做点别的。


咆哮:我写了一个完整的重启咆哮,只是为你下面:-)。要点:只是不要意外或自发重启。

不幸的是,Windows Installer 本身会在以下情况下自发重启 以静默模式运行,除非您指定 REBOOT=ReallySuppress on 命令行 - 如果重启确实在等待。


不要:导致自发的、未经通知的重新启动实际上在技术上很容易(自定义操作,或设置 ForceReboot 以静默模式运行的 MSI - 甚至是 ScheduleReboot 没有在命令行上设置 REBOOT=ReallySuppress - described here - 详细 - 或者你可以硬编码 REBOOT property 到属性表中的 "Force" - 这也将触发重启而不发出警告)。像这样重新启动在逻辑上和实用上都是不合理的。事实上非常如此。

重启的道德规范:重启知识工作者的 PC 是非常严重的,我看到人们以更少的价格被送出家门。 这没什么好漠不关心的: 数十个 Visual Studio 窗口、成堆的半写电子邮件、记事本中的笔记以及瘟疫本身:missed chat messages web pages without state management 等...除了丢失数据(这种情况仍然会发生,尽管大多数应用会在关闭前保存),人们会失去上下文(很明显,但仍然如此) - 就好像有人拿走了你的物理桌面并把它刷干净,文件最终落在地板上和垃圾桶里(现在政治上正确地称为“回收站”)。

还有更多:

  • 如果重启后有很多用户登录怎么办?
  • 可能有人粗心大意地安装在需要仔细管理重新启动的服务器上(例如:需要以特定顺序启动多个服务器以进行审计和各种目的 - 是的,它发生了,空气中充满不是很好的话)。
  • 上帝禁止您在整个公司都登录的情况下突然重启终端服务器(甚至不确定是否可能)。
  • 该列表可能非常技术性 - 最奇怪的事情发生了。例如,系统管理员可以为 "semi-automatic installation" 创建一个批处理文件。换句话说,他们启动了批处理文件——它以静默模式运行 MSI,并带有一些准备好的设置,并且盒子在没有警告的情况下重新启动。不确定 Windows 中有哪些功能可以在服务器操作系统上处理此问题。
  • 如果您通过自定义操作强制立即和自发重新启动,并且 MSI 是 Burn 捆绑包中按顺序运行的众多设备之一,该怎么办?不确定 Burn 是如何处理这个问题的?它可能具有处理它的功能。

底线是这样的:您的软件可能会被彻底抛弃 诸如此类的“行为”公司。意外重启。真的可以。就像“...如果他们这样做了,他们还会做哪些我们无法忍受的事情”。


Civilized Reboot:我不确定这里的所有方面,但我会推荐这样的软件,如果没有重启就无法运行:

  1. 预感:在安装开始之前宣布重启真的 安装后需要。允许提前退出。帮助所有人。
  2. ReallySuppress:永远不要不尊重设置为 REBOOT=ReallySuppress 的 MSI 文件的命令行以禁止所有重新启动(这是 msiexec.exe 的内置功能 - Windows Installer 引擎 - 从理论上讲,您可以禁止 MSI 安排的所有重启 - 仍然存在黑客攻击)。
    • 我们需要这种方式在业务中发挥作用,并消除在重新启动时随时做任何事情的免费方法。
    • 可怜的系统管理员不得不处理 freebase 软件包,他们采取了绝望的措施来防止自发重启:Is there a really-really-really-don't-reboot parameter for msiexec?
    • 管理员确实会采取这些极端措施来防止重新启动 (removing system privileges for reboot to control what is going on)。我不建议他们这样做,因为这会导致其他意想不到的问题——技术黑客总是这样做的。总是有副作用。正确的方法是消除软件包中的重启黑客行为。不是吗?或者是真正抑制此类意外情况的 Windows 更新。
  3. 标准方法:安装后,Windows Installer 本身将显示一个对话框以重新启动。允许使用此标准方法。如前所述:尊重静默安装的重启抑制。请注意,Windows Installer 将显示重新启动对话框 - 如果需要替换文件 - 即使您没有在您的MSI 文件。 Automagic
  4. No Soup For You:您可以让您的应用程序在重启完成之前拒绝启动。这样做的方法很多,也许只是扫描一个需要替换的文件,例如在您允许启动之前。打开潜在的启动错误,所以保持简单。如果有必要的先决条件需要重新启动,EXE 甚至可能无法启动。 I wish we could hide shortcuts added until reboot is complete(如果确实需要重启)。还是一个模式对话框,如果不重新启动就无法关闭?上膛的枪。我宁愿不添加任何按钮来启动应用程序中的重新启动,我只是声明需要重新启动并退出 - 如果确实有必要的话。为 QA 人员进行的测试更少?

【讨论】:

  • 感谢@Stein 的全面回答。你是对的,Burn 将禁止重新启动,直到安装完成。我想要的是在最后重新启动,无论是否有任何 MSI 需要。我无法管理 InstallExecuteSequence 为该捆绑包工作。
  • 为什么有必要这样做?
【解决方案2】:

请改用/forcerestart。 Burn 关注的是Standard Installer Command-Line Options

【讨论】:

  • Pretty hidden those switches。在烧录 exe 上运行 /? 只显示其中的一些(请注意克里斯,这很清楚)。没有核武器!没有核武器! (那是给你的鲍勃!)。绝地技巧:“...如果你突然重启我的电脑,你想回家重新思考你的生活!”:-)。
  • 好吧,当然只是为了好玩,但是看到不需要的重启是多么令人讨厌,我希望人们能更好地支持RestartManager feature。并非总是可能的。
  • 使用 /?刻录时不显示 /forcerestart 选项。
猜你喜欢
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多