我在c#中構建了一個setup.exe,它運行幾個鏈接的MSI(使用/ QUIET/NORESTART)。最後,我想檢查一下機器是否需要重啓(也就是說,如果其中一個MSI請求重啓)。如何找出我剛剛安裝的MSI是否請求重新啓動Windows?
我該如何檢測?
我在c#中構建了一個setup.exe,它運行幾個鏈接的MSI(使用/ QUIET/NORESTART)。最後,我想檢查一下機器是否需要重啓(也就是說,如果其中一個MSI請求重啓)。如何找出我剛剛安裝的MSI是否請求重新啓動Windows?
我該如何檢測?
以下注冊表項的信息:
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/en-us/library/system.diagnostics.process.exitcode(v=vs.90).aspx)檢索進程退出代碼。
因此,您可以簡單地檢查MSI進程的退出代碼,並在完成所有MSI的運行後,如果其中任何一個返回了3010,那麼您知道需要重新啓動。
我甚至見過這個實用程序:http://exodusdev.com/products/whyreboot 它不僅知道需要重新啓動,而且還爲什麼... 如何以編程方式檢索此類信息?註冊? – Nestor 2009-11-06 06:48:35
請參閱此處的後續問題:http://stackoverflow.com/questions/1689610/how-to-detect-programmatically-when-the-install-updates-and-shut-down-the-comput – Nestor 2009-11-06 20:28:41