2011-05-06 72 views
2

我有一個Windows安裝程序提示用戶輸入MySQL信息(服務器,端口,用戶名,密碼),並希望在完成安裝之前確保參數是正確的。在MSI安裝程序腳本中嘗試/捕獲

我有一個安裝程序項目與自定義操作鏈接到安裝程序類,我正在做我的錯誤檢查在「安裝」方法。我的錯誤發生在catch()部分。

任何建議或意見非常感謝。

編輯:當我點擊[Next]安裝程序安裝應用程序,然後提示MessageBox(如果有錯誤),但完成安裝。我希望它能夠回滾並調出前一個屏幕。

Edit2:從MySqlException引發的異常是:「無法連接任何指定的MySQL主機」,這是正確的,但安裝程序不會返回/回滾。

public override void Install(IDictionary stateSaver) 
{ 
    base.Install(stateSaver); 

    // parameters from installer 
    // generate connection string conStr 
    MySqlConnection conn = new MySqlConnection(conStr); 
    MySqlCommand cmd = new MySqlCommand(); 

    // open connection and create database 
    try 
    { 
     conn.Open(); 

     cmd.Connection = conn; 
     // create database 
     // create table 
     // insert values to test 
    } 
    catch (MySqlException ex) 
    { 
     //I would like this to go back to the prior page 
     //where it asks for user input 
     MessageBox.Show("There was a problem connecting to the database."); 
     this.Rollback(stateSaver); // not working? 
    } 

    // close connection 
    conn.Close(); 
} 
+1

添加一個catch(Exception ex){}'來捕獲所有的泛型異常 - 可能還有其他東西被拋出? – 2011-05-06 20:11:23

+1

就像Josh M.說的那樣,抓住所有例外情況可能會有幫助。 Connector/NET可能會拋出IOExceptions。 MySqlExceptions通常是通過已建立的連接發送服務器錯誤,如果建立連接時發生錯誤,則可能會拋出其他錯誤。 – 2011-05-06 20:28:08

+0

在顯示messagebxo之後,您是否可以簡單地重新拋出異常?順便說一下這個來自System.Configuration.Install的安裝程序與MSI和MSI自定義操作沒有任何關係。 – 2011-05-06 20:38:00

回答

1

要強制回滾當前安裝,可以重新拋出異常。你只是顯示在你的消息框中。