C# 如何确定我刚安装的MSI是否请求重新启动Windows?
我在C#中构建了一个C# 如何确定我刚安装的MSI是否请求重新启动Windows?,c#,windows,installation,windows-installer,C#,Windows,Installation,Windows Installer,我在C#中构建了一个setup.exe,它运行多个链式MSI(使用/QUIET/NORESTART)。最后,我想检查机器是否需要重新启动(也就是说,如果一个MSI请求重新启动) 如何检测到这种情况?以下注册表位置包含以下信息: 键HKLM\System\CurrentControlSet\Control\Session Manager,值PendingFileRenameOperations 来源:另一种方法是检查代码中运行的所有MSI的退出代码如果MSI的退出代码为3010,则需要重新启动。(
setup.exe
,它运行多个链式MSI(使用/QUIET/NORESTART
)。最后,我想检查机器是否需要重新启动(也就是说,如果一个MSI请求重新启动)
如何检测到这种情况?以下注册表位置包含以下信息: 键
HKLM\System\CurrentControlSet\Control\Session Manager
,值PendingFileRenameOperations
来源:另一种方法是检查代码中运行的所有MSI的退出代码如果MSI的退出代码为3010,则需要重新启动。()。
假设您正在使用
System.Diagnostics.Process
运行MSI,并且在进程退出后,您将使用ExitCode
属性()检索进程退出代码。
因此,您只需检查MSI进程的退出代码,当您运行完所有MSI后,如果其中任何MSI返回3010,则您知道需要重新启动。要使用PowerShell命令进行补充:
$rebootPending = $null -ne
(Get-ItemProperty 'HKLM:\System\CurrentControlSet\Control\Session Manager').PendingFileRenameOperations
请注意,
$rebootPending
等于$true
表示系统重新启动因任何原因而挂起,而不仅仅是由于基于MSI的安装。我甚至看到过这个实用程序:它不仅知道需要重新启动,还知道为什么。。。如何以编程方式检索此类信息?注册表?请参阅下面的问题:我有一台没有挂起文件重命名操作的机器,在“关机”按钮中显示小屏蔽。为什么?关机按钮中的屏蔽不是意味着“安装更新并关机”吗?这不等于需要重新启动。好的。。。那么你知道如何探测塔特盾吗?我把它作为一个单独的问题提出来,有人抱怨它是这个问题的重复:-)我了解到,如果在运行MSI时系统已经等待重新启动,则某些MSI将不会使用3010的退出代码。微软的.NETFramework4.5.2离线安装程序就是这种MSI表现出这种行为的一个例子。如果您在MSI执行之间没有重新启动,而再次运行它,它只返回一个退出代码0。@user16563谢谢您提供的信息,很高兴知道。另一个很好的例子说明了令人困惑的不一致窗口是如何工作的