2009-09-16 34 views
0

我有一個安裝程序類,這裏是一個片段:自定義安裝類,回滾方法從來沒有所謂的

[RunInstaller(true)] 
public partial class ServerWrapInstaller : Installer 
{ 
    public override void Install(IDictionary stateSaver) 
    { 
     EventLog.WriteEntry("Installer", "Install", EventLogEntryType.Information); 
     base.Install(stateSaver); 
    } 

    public override void Commit(IDictionary savedState) 
    { 
     EventLog.WriteEntry("Installer", "Commit", EventLogEntryType.Information); 
     base.Commit(savedState); 
    } 

    public override void Rollback(IDictionary savedState) 
    { 
     EventLog.WriteEntry("Installer", "Rollback", EventLogEntryType.Information); 
     base.Rollback(savedState); 
    } 

    public override void Uninstall(IDictionary savedState) 
    { 
     EventLog.WriteEntry("Installer", "UnInstall", EventLogEntryType.Information); 
     base.Uninstall(savedState); 
    } 
} 

現在,我開始在完整的GUI模式安裝,然後點擊中間的「取消」按鈕導致安裝回滾的過程。問題是沒有調用RollBack方法。我沒有在事件日誌中看到預期的條目。

我想提一提的是,如果我讓安裝完成,我會在事件日誌中看到「安裝」消息,如果我然後卸載,我會在事件日誌中看到「卸載」消息。但是,如果在中間停止安裝過程,按下「取消」按鈕,我確實看到進度條向後移動,但回滾方法未被調用。

我做錯了什麼?在此先感謝您的幫助。

編輯:

提供更多詳細信息...

安裝程序是MSI軟件包。

該包是使用安裝項目在vs2009中構建的。安裝程序類用作安裝項目的自定義操作。

由於這是一個MSI軟件包,我有一個選項可以在靜默模式或用戶交互式運行。當我編寫「完全GUI模式」時,我會進行用戶交互模式。

+0

你是什麼意思運行安裝意思在完整的GUI模式?您的ServerWrapInstaller是否被.msi包或安裝應用程序使用?如果是這樣,您使用哪種技術來創建安裝程序? – 2009-09-16 10:33:36

+0

馬克:我編輯帖子 – user88637 2009-09-16 11:18:14

回答

1

當您的安裝過程中出現問題時,會調用回滾方法。手動取消安裝不算。例如,您可能有必需的條件,檢查正確的框架版本,或檢查文件的存在,然後拋出一個InstallException。看看鏈接,你可以看到一些例子。你會想要在你的回滾中處理任何其他異常。

出於測試目的,您可以強制它失敗。只需在您的某個方法中拋出異常,例如安裝方法。添加以下行:

throw new InstallException(); 
// or 
throw new InstallException("Some error message here"); 

然後應該調用回滾方法。

+0

感謝您的評論,我沒有在安裝事件中種植異常,回滾仍然沒有被調用。 – user88637 2009-09-16 11:42:39

+0

@ yossi1981:可以肯定的是,你沒有使用try/catch正確的嘗試它? – 2009-09-16 11:47:47

+0

我沒有使用try/catch,拋出異常。我甚至在安裝過程中看到異常消息。 – user88637 2009-09-16 12:28:21

0

一定要添加自定義操作的自定義操作的回滾文件夾

相關問題