【问题标题】:Reboot system from Setup project从安装项目重新启动系统
【发布时间】:2010-05-21 09:58:57
【问题描述】:

我正在使用 Visual Studio 创建一个安装项目。我想在安装成功后重新启动系统。

我想要一次努力。在将设置交付给客户之前,我不想每次都使用任何外部工具/实用程序来修改设置。

我可以调整设置项目本身吗?

我该怎么做?

【问题讨论】:

    标签: .net visual-studio installation


    【解决方案1】:

    您可以使用 ORCA 来执行此操作。

    有关详细信息,请参阅此 Microsoft HOW TO 文章:

    http://support.microsoft.com/kb/827020

    【讨论】:

    • 我检查了这个链接。在这种情况下,我或任何其他开发人员每次都需要使用 ORCA 修改 MSI,然后再将设置交付给客户端。我不能一次性修复吗?
    • 我不知道任何其他方式,您可以使用 Oded 的答案并将 Shutdown 命令添加为自定义操作。但是,我建议您小心确保首先告诉用户这件事,因为如果您在没有任何提示的情况下重新启动他们的 PC,他们可能会有点不高兴......
    【解决方案2】:

    试试这个:

    在单独的解决方案中创建一个空的合并模块项目并构建它。这将在项目的 Debug 或 Release 文件夹中创建一个 msm 文件。

    在 Orca 中编辑生成的 msm - 设置 REBOOT=Force 属性,如 here 所示。您只需执行一次。

    在您的主解决方案中,将合并模块添加到您的设置项目并构建它。由于合并模块是单独构建的,它将保留 reboot 属性并将其合并到您的 MSI。

    【讨论】:

      【解决方案3】:

      请不要让我失望,但我不会回答你的具体问题,但这是在安装 msi 后重新启动 PC 的一种方法。

      改用WiX,VS 内置设置更加灵活,并且有一个 VS 插件。

      如果您使用 WiX,这是启动重启的代码。

      <InstallExecuteSequence>
        <ScheduleReboot After='InstallFinalize' />
      </InstallExecuteSequence>
      

      或者,您可以为您的 VS 设置项目创建一个转换,该转换仅包含用于启动重新启动的附加条目,然后在您构建项目时,您所需要做的就是应用转换,您可以将其以批处理文件的形式发送给客户或类似的。

      ps 请记住,将 shell 命令作为自定义操作发出并不是最好的方法。这将导致机器重新启动并且不返回正确的exit code 3010,因此如果有人试图捕获退出代码或在命令行上执行 /norestart,shell 命令将忽略这一点。

      编辑 创建 msi 文件后,使用 orca 打开它,然后将必要的更改添加到表中以 schedulereboot。将更改保存为转换,然后只要 msi 文件没有发生显着变化,您就可以在每次运行时将转换应用于 msi。

      我个人不想这样做,因为这是一个额外的步骤,你应该能够在源代码中做到这一点。

      要在 orca 中添加重启序列,请转到 InstallExecuteSequence 表并找到 InstallFinalize 条目。添加一个名为 ScheduleReboot 的新条目,并在序列列中输入一个比 InstallFinalize 阶段的序列大 1 的数字。

      【讨论】:

      • 您能否详细说明一下 VS 设置项目的转换?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 2012-02-20
      相关资源
      最近更新 更多