2008-12-16 30 views
7

Tôi đang viết một hành động tùy chỉnh được quản lý. Tôi đang sử dụng khung DTF từ Windows Installer Xml để bọc dll được quản lý vào một dll CA có thể sử dụng. CA làm những gì nó là vụ phải, nhưng tôi vẫn đang gặp khó khăn với xử lý lỗi:Làm cách nào để hiển thị Thông báo lỗi bằng cách sử dụng Tác vụ tùy chỉnh được quản lý với Trình cài đặt Windows

Dim record As New Record(1) 

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

Đoạn mã trên tạo ra các văn bản sau đây thể hiện trong nhật ký MSI:

MSI (c) (C4! C6) [13: 15: 08: 749]: Sản phẩm: TestMSI - Lỗi 27533. Mật khẩu phân biệt chữ hoa chữ thường không khớp.

Số lỗi đề cập đến mã có trong bảng Lỗi trong MSI. Thông báo được hiển thị ở trên là chính xác.

Vấn đề của tôi là: Tại sao trình cài đặt Windows KHÔNG tạo hộp thoại thông báo cho người dùng về lỗi?

Trả lời

-1

Nếu bạn muốn hộp thoại hiển thị có chứa thông báo, bạn phải tự mình thực hiện.

Dưới đây là một số mã tôi sử dụng để xử lý lỗi trong các hành động tùy chỉnh được quản lý chạy SQL. Nó hiển thị hộp thông báo nếu cài đặt đang hoạt động với giao diện người dùng đầy đủ. Đó là trong C# nhưng hy vọng bạn sẽ có được ý tưởng.

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

đây không phải là cách được chấp nhận rộng rãi nhất để làm điều này vì cửa sổ thông báo có thể xuất hiện phía sau trình cài đặt và sẽ được khởi chạy với các đặc quyền khác nhau mà tôi nghĩ –

13

MSI có thể thực hiện việc này, nhưng bạn cần HOẶC trong một số giá trị bổ sung cho đối số MessageType.

ví dụ:

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

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

Xem this thread từ danh sách gửi thư của người dùng wix để biết thêm chi tiết.

2

Xin cảm ơn thông tin.

Bạn có biết liệu có cách nào hiển thị các thư lớn không? Khi tôi sử dụng:

Bản ghi kỷ lục = new Record(); record.FormatString = pReallyBigMessage;

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

Chỉ các phần được hiển thị. Tôi muốn gắn bó với chức năng Session.Message và không sử dụng Hộp thư Windows.Forms vì tiêu điểm.

Greetings

2

tôi đã chạy vào cùng một vấn đề, theo Wix: Một nhà phát triển Hướng dẫn về Windows Installer XML Nick Ramirez, các phương pháp đăng nhập và thông điệp không hoạt động khi một hành động tùy chỉnh được gọi từ một giao diện người dùng điều khiển.

Các vấn đề liên quan