2011-09-12 28 views
7

Tôi đang sửa đổi một WiX trình cài đặt hiện có để xử lý việc cập nhật một cài đặt hiện có của một trong những sản phẩm của chúng tôi. Có một số giá trị mặc định được chỉ định trong thuộc tính. Các thuộc tính này được hiển thị cho người dùng để chỉnh sửa và sau đó được ghi vào tệp cấu hình tùy chỉnh của trình cài đặt hiện có.Sử dụng một hành động tùy chỉnh WiX để thiết lập giá trị của một tài sản

Mã của tôi cần đủ thông minh để phát hiện xem mã có đang thực hiện cài đặt hoàn toàn mới so với cài đặt phiên bản cũ hơn hay không. Nếu nó đang thực hiện cài đặt hoàn toàn mới, nó cần đặt thuộc tính thành giá trị mặc định. Nhưng nếu nó đang thực hiện nâng cấp, mã cần truy xuất valus của các thuộc tính đó từ tệp cấu hình hiện có và hiển thị chúng cho người dùng.

Từ đọc sách tôi đã thực hiện, có vẻ như với tôi tôi cần phải sử dụng type 51 custom action để đặt thuộc tính. Nhưng làm cách nào để triển khai hành động tùy chỉnh này?

Tôi nghĩ rằng trước tiên tôi phải xác định hành động tùy chỉnh để đặt nó vào bảng hành động tùy chỉnh và sau đó tôi cần phải gắn thẻ ở đâu đó để gọi. Và sau đó tôi cần phải xác định nó.

Tôi làm cách nào để thực hiện việc này? Một số mã ví dụ sẽ là gì?

Trả lời

4

Sau khi thực hiện một số nghiên cứu khác về hành động tùy chỉnh, tôi tin rằng tôi đã có tất cả những điều này được tìm ra. Tôi đã thêm một thẻ < Binary> vào tệp .wxs để xác định vị trí của tác vụ tùy chỉnh. Sau đó tôi tham chiếu ID của thẻ nhị phân trong CustomAction. Cuối cùng, tôi đã thêm thẻ Custom vào phần InstallExecuteSequence tham chiếu thẻ CustomAction theo ID.

Thẻ tùy chỉnh cuối cùng được đề cập ở trên cần phải đi vào phần InstallUISequence, không phải phần InstallExecuteSequence, vì hành động tùy chỉnh cần được gọi trước khi hộp thoại được hiển thị.

Để tự mình thực hiện Hành động tùy chỉnh, tôi đã thêm dự án thư viện Action Action C# mới vào giải pháp. Ở đó, tôi đã triển khai một phương thức, được trang trí với thuộc tính [CustomAction]. Phương thức này sử dụng các giá trị của các thuộc tính được lưu trữ trong đối tượng Session được truyền như một tham số cho phương thức và xác định đường dẫn của tệp thi hành của phiên bản hiện tại. Sau đó nó thực hiện công việc cần thiết để xác định vị trí các giá trị trong tệp Cấu hình của chương trình cần phải được giữ nguyên trên các phiên bản và ghi chúng vào các thuộc tính khác cho kịch bản nâng cấp.

2

Đọc phần sau của WiX tutorial:

  1. Extra Actions: đưa ra một cái nhìn tổng quan về cách thêm một hành động Custom để MSI;
  2. What's Not in the Book: cung cấp ví dụ về cách triển khai Hành động tùy chỉnh trong DLL.
+0

Đó là exectly gì tôi đã làm và tôi đã đưa ra các giải pháp tôi đăng. –

1

Ví dụ:

[CustomAction] 
    public static ActionResult SetProperty(Session session) 
    { 
     try 
     { 
      session.Log("Begin SetProperty action"); 

      session["PROPERTY_NAME"] = "value" 


     } 
     catch (Exception exception) 
     { 
      session.Log("ERROR in custom action SetProperty {0}", exception.ToString()); 

      return ActionResult.Failure; 
     } 

     return ActionResult.Success; 
    } 
Các vấn đề liên quan