如何查明我刚刚安装的 MSI 是否请求重新启动 Windows?

问题描述 投票:0回答:3

我在 C# 中构建了一个

setup.exe
,它运行多个链接的 MSI(使用
/QUIET /NORESTART
)。最后,我想检查机器是否需要重新启动(即,其中一个 MSI 是否请求重新启动)。

我怎样才能检测到?

c# windows installation windows-installer
3个回答
6
投票

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

HKLM\System\CurrentControlSet\Control\Session Manager
,值
PendingFileRenameOperations

来源:https://learn.microsoft.com/en-us/sysinternals/downloads/pendmoves


2
投票

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

假设您使用

System.Diagnostics.Process
运行 MSI,并且在进程退出后,您将使用
ExitCode
属性 (http://msdn.microsoft.com/en-us/library) 检索进程退出代码/system.diagnostics.process.exitcode(v=vs.90).aspx)。

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


0
投票

PowerShell 命令补充 Vinko Vrsalovic 的帮助

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

请注意,

$rebootPending
等于
$true
表示系统重新启动因任何原因而等待,而不仅仅是由于基于MSI的安装。

© www.soinside.com 2019 - 2024. All rights reserved.