我在Visual Studio中有一個安裝項目。作爲常規安裝的一部分,它會在Windows註冊表中創建/更新某些鍵和值。我怎樣才能使更新可逆?VS安裝項目;如何在卸載時恢復註冊表值?
你可能會說「他們是可逆的」,但我不這麼認爲。以下是我認爲它的工作原理:使用VS設計器來指定您想要的註冊表項和值。這些鍵和值在安裝過程中寫入,在卸載過程中被刪除。簡單。什麼是不可逆的?
當安裝過程中寫入的某個鍵中存在某個值時,會出現問題。假設它的值爲1.然後在新安裝時,它的值爲100.卸載後,它根本沒有任何價值 - 價值已經消失。
我試着用「自定義操作」來解決這個問題。
安裝期間,如果用戶確認,msiexec將值寫入註冊表。無論在註冊表鍵之前,都不見了。 (我們稱之爲「更新A」)
要保留該值,在安裝時,會有一個自定義操作讀取並保留「before」設置。它在「更新A」之前運行。到現在爲止還挺好。
在卸載時,正常的操作過程是刪除安裝期間添加的常規註冊表項和值。這工作得很好。稱這個「更新B」。
要還原原始註冊表值,我有另一個「自定義操作」。這個在卸載時運行。它成功地將原始值恢復到註冊表中。註冊表看起來就像在最初的安裝之前一樣。我驗證了這可以使用ProcMon(一種讓我監視註冊表更新等的工具)。調用這個「更新C」。
只有一個問題。在卸載時,更新B正在發生更新C.這意味着,在自定義操作恢復原始註冊表設置後,msi會清除還原的值,就像它處理所有其他註冊表更新一樣。
結果是註冊表具有空值而不是恢復的值。
任何幫助?我如何重新排列更新?我需要Orca嗎?我真的不想安裝和學習另一種工具來實現這一點。我也希望它是自動的。絕對不想通過一個MSI編輯器直觀地點擊來實現這一點。
我可以通過使用WindowsInstaller.Installer類的Javascript後期構建事件來做到這一點嗎? Aaron Stebner published a script添加了「安裝後啓動應用程序?」對話框到由Visual Studio生成的MSI。 Windows Installer支持「啓動應用程序」功能,但未在VS2008/2005的設計人員中公開。在啓動對話框中添加一個快速生成器腳本,作爲VS中的後期構建步驟運行。
與自定義操作的排序可能類似嗎?