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

如何确定刚安装的MSI是否请求Windows重新启动?

  •  7
  • Nestor  · 技术社区  · 15 年前

    我在C中构建了一个setup.exe,它运行多个链接的msi(使用/quiet/norestart)。最后,我想检查机器是否需要重新启动(也就是说,如果某个MSI请求重新启动)。

    我怎么能发现呢?

    3 回复  |  直到 6 年前
        1
  •  5
  •   mklement0    6 年前

    以下注册表位置包含信息:

    钥匙 HKLM\System\CurrentControlSet\Control\Session Manager 价值 PendingFileRenameOperations

    来源: http://technet.microsoft.com/en-us/sysinternals/bb897556.aspx

        2
  •  1
  •   bsara    11 年前

    另一种实现这一点的方法是检查在代码中运行的所有MSI的退出代码。 如果MSI的退出代码为3010,则需要重新启动。 ( http://msdn.microsoft.com/en-us/library/aa368542.aspx )

    假设你正在使用 System.Diagnostics.Process 要运行msis并在进程退出后,可以使用 ExitCode 财产( http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exitcode(v=vs.90).aspx )

    因此,您可以简单地检查msi进程的退出代码,当您运行完所有msi后,如果其中任何一个返回3010,那么您就知道需要重新启动。

        3
  •  0
  •   mklement0    6 年前

    补充 Vinko Vrsalovic's helfpul answer 用一个 动力壳 命令:

    $rebootPending = $null -ne 
      (Get-ItemProperty 'HKLM:\System\CurrentControlSet\Control\Session Manager').PendingFileRenameOperations
    

    注意 $rebootPending 均等 $true 指示系统重新启动等待 任何 原因,不仅仅是基于MSI的安装。

    推荐文章