如何從C#自定義動作中安裝後提示重新啓動計算機?強制從C#中的Msi自定義動作重新啓動
我們使用VS 2005的安裝項目爲我們的設置,我們需要以編程方式決定提示重新啓動(所以它不會發生在每一個安裝,只是一些)。
更新:我們正在尋找一些已經內置到MSI自定義操作系統中的東西。如果不存在,我們可以自己重新啓動電腦,但想避免這種情況。
更新:我們看到你可以在哪裏設置REBOOT =強制編輯在Orca中的Msi,你可以在運行時從C#自定義動作修改這些表嗎?我們可以將其設置爲每次重新啓動,但這可能會使我們的設置很煩人(它只需要在極少數情況下重新啓動)。
UPDATE:我們嘗試設置:
savedState["REBOOT"] = "Force";
從我們的自定義操作的安裝()方法中,但沒有運氣。它似乎不像IDictionary,savedState真的做任何事情。
也試過:
Context.Parameters["REBOOT"] = "Force";
但我認爲這個集合是剛剛通過的自定義操作命令行參數。
更新:有沒有辦法用Orca編輯我們的MSI來使這個技巧奏效?也許安排在某些文件存在的情況下重新啓動?我們還沒有找到如何從C#自定義操作中設置MSI屬性。
更新:我們試圖鉤住AppDomain.ProcessExit和AppDomain.DomainUnload並啓動一個新的線程,並調用Process.GetCurrentProcess()WaitForExit(),沒有這些事件將觸發從C#自定義操作中...
我們需要內置於MSI自定義操作系統中的東西。 我們總是可以用shutdown.exe(或你的Win32函數)以編程方式重啓PC,但是由於MSI需要首先正確完成,所以尋找更好的解決方案。 – jonathanpeppers 2009-07-24 15:22:49
我們有一個C++自定義動作庫,如果需要的話可以重新啓動,現在我想到了它,它可能會設置MSI REBOOT標誌而不是直接調用Win32函數。它已經有一段時間了,所以我不確定...... C++自定義操作不會太難寫,所以我不會排除它。 – Sneal 2009-07-24 19:15:16
瞭解如何從託管自定義操作設置MSI標誌?我想這可能是不可能的... – jonathanpeppers 2009-07-24 20:53:11