2008-12-16 18 views
7

我正在編寫託管自定義操作。我正在使用Windows Installer Xml中的DTF框架將託管的dll包裝成可用的CA dll。該CA做的事情是應該的,但我仍然有錯誤處理的麻煩:如何在Windows Installer中使用託管自定義操作顯示錯誤消息

Dim record As New Record(1) 

' Field 0 intentionally left blank 
' Field 1 contains error number 
record(1) = 27533 
session.Message(InstallMessage.Error, record) 

以上代碼生成的MSI日誌中顯示以下文字:

MSI(C)( C4!C6)[13:15:08:749]:產品:TestMSI - 錯誤27533.區分大小寫的密碼不匹配。

錯誤編號是指包含在MSI內的錯誤表中的代碼。上面顯示的消息是正確的。

我的問題是:爲什麼Windows Installer不創建一個對話框來通知用戶有關錯誤?

回答

-1

如果您想要顯示包含該消息的對話框,則必須自己執行此操作。

下面是我用來在運行SQL的託管自定義操作中執行錯誤處理的一些代碼。 如果安裝使用完整的UI進行操作,它將顯示一個消息框。 這是在C#,但希望你會明白。

private void _handleSqlException(SqlException ex) 
    { 
     StringBuilder errorMessage = new StringBuilder(); 
     errorMessage.Append("A SQL error has occurred."); 
     for (int i = 0; i < ex.Errors.Count; i++) 
     { 
      errorMessage.Append("Index #" + i + "\n" + 
       "Message: " + ex.Errors[i].Message + "\n" + 
       "LineNumber: " + ex.Errors[i].LineNumber + "\n" + 
       "Source: " + ex.Errors[i].Source + "\n" + 
       "Procedure: " + ex.Errors[i].Procedure + "\n"); 
     } 
     session.Log(errorMessage); 
     if (session["UILevel"] == "5") 
     { 
      MessageBox.Show(errorMessage); 
     } 
    } 
+3

這不是最廣泛接受的方法,因爲消息窗口可能出現在安裝程序後面,並且將以不同的權限啓動 – 2011-06-22 00:44:11

13

MSI可以做到這一點,但是您需要在messageType參數的某些額外值中使用OR。

例如。

Record record = new Record(); 
record.FormatString = string.Format("Something has gone wrong!"); 

session.Message(
    InstallMessage.Error | (InstallMessage) (MessageBoxIcon.Error) | 
    (InstallMessage) MessageBoxButtons.OK, 
    record); 

請參閱wix-users郵件列表中的this thread瞭解更多詳情。

2

嗨,感謝您的信息。

你知不知道是否有辦法顯示大信息? 當我使用:

Record record = new Record(); record.FormatString = pReallyBigMessage;

  Session.Message(InstallMessage.Error | (InstallMessage)System.Windows.Forms.MessageBoxIcon.Warning | 
       (InstallMessage)System.Windows.Forms.MessageBoxButtons.OK, record); 

只顯示零件。 我想堅持使用Session.Message功能,而不是使用Windows.Forms Messagebox,因爲焦點。

問候

2

我遇到了同樣的問題,根據維克斯:由尼克·拉米雷斯開發人員指南到Windows Installer XML,日誌和留言方法不起作用時自定義操作從UI叫控制。

相關問題