我已经在c#中build立了一个setup.exe,运行几个链接的MSI(使用/ QUIET / NORESTART)。 最后,我想检查一下机器是否需要重启(也就是说,如果有一个MSI请求重启)。
我如何检测?
以下注册表项包含以下信息:
HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
来源: http : //technet.microsoft.com/en-us/sysinternals/bb897556.aspx
另一种方法是检查您在代码中运行的所有MSI的退出代码。 如果MSI的退出代码是3010,则需要重新启动。 ( http://msdn.microsoft.com/en-us/library/aa368542.aspx )。
假设您使用System.Diagnostics.Process
来运行MSI,并且在进程退出后,您将使用ExitCode
属性( http://msdn.microsoft.com/zh-cn/library/)检索进程退出代码system.diagnostics.process.exitcode(v = vs.90).aspx )。
所以,你可以简单地检查一个MSI进程的退出代码,当你完成所有的MSI运行,如果他们中的任何一个返回3010,那么你知道你需要重新启动。