我有一個安裝程序,提示用戶在安裝後重新啓動計算機。在這種情況下,我寧願不讓用戶重新啓動計算機,並讓explorer.exe使用隨Windows Vista及更高版本提供的RestartManager API自行重新啓動。如何使用RestartManager通過Windows Installer自定義操作重新啓動explorer.exe?
我已經創建了一個單獨的可執行文件,在安裝過程中將其複製到本地計算機,並在此之後運行。單獨的可執行文件註冊explorer.exe,將其關閉,然後根據以下代碼重新啓動它:http://msdn.microsoft.com/en-us/library/aa373681%28v=VS.85%29.aspx。當可執行文件與安裝程序分開運行時,它可按設計工作。但是,當它作爲使用InstalShield創建的MSI包的一部分的自定義操作運行時,它會關閉explorer.exe,但不會重新啓動它。
當它與安裝程序一起運行時,我總是得到RmRestart的160錯誤代碼。文檔說這是一個錯誤代碼,意味着提供了無效的參數。 (http://msdn.microsoft.com/en-us/library/aa373665%28v=vs.85%29.aspx)。我非常肯定我的參數不是無效的,因爲它們在可執行文件獨立於Windows Installer運行時工作。
我被困在這一點,不知道還有什麼可以做到這一點。我唯一不確定的是如果「0」可以是從RmStartSession()返回的錯誤代碼爲0(成功)的適當會話句柄。假設這是錯誤的,我建立我的可執行文件,以便在InstallValidate之前接受由Windows安裝程序創建的RmSessionKey。我用它來調用我的可執行文件作爲延期操作。在這種情況下,我收到RcShutdown的錯誤4c3,這似乎是一個無效的錯誤代碼。
懸崖:有單獨的.exe使用RestartManager API關閉,重新啓動explorer.exe,它不與Windows Installer一起運行時工作,但在組合時會中斷。查看RmRestart()的錯誤代碼160。試着想出這個想法,跑出想法。我可以提供代碼片段,如果人們想...
感謝您的任何建議/意見。