如何找出我刚刚安装的MSI是否要求重启Windows?

时间:2009-11-06 06:36:39

标签: c# windows installer windows-installer

我在c#中构建了一个setup.exe,它运行几个链式MSI(使用/ QUIET / NORESTART)。最后,我想检查机器是否需要重新启动(也就是说,如果其中一个MSI要求重启)。

我该如何检测呢?

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

另一种实现此目的的方法是检查您在代码中运行的所有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,那么您就知道需要重新启动。

答案 2 :(得分:0)

使用 PowerShell 命令补充Vinko Vrsalovic's helfpul answer

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

请注意,$rebootPending等于$true表示系统重启是出于任何原因,而不仅仅是基于MSI的安装。