2011-09-05 14 views
25

Tôi có một hành động tùy chỉnh và cần phải nhận được dưới giá trị cho việc sao chép một số bộ phận từ thư mục cài đặt vào thư mục VS2010Có cách nào khác để truy cập chi tiết phiên trong hành động tùy chỉnh bị trì hoãn không?

  1. đường dẫn thư mục VS2010 (VS2010DEVENV tài sản)
  2. đường Installation (INSTALLLOCATION tài sản)

Để cung cấp đủ đặc quyền, tôi đã đặt hành động tùy chỉnh là Execute='deferred' Impersonate='no'. Nhưng khi chạy trình cài đặt, nó đăng thông điệp:

Không thể truy cập thông tin chi tiết phiên từ một hành động tùy chỉnh không ngay lập tức

Có vẻ như chúng ta không thể truy cập vào một tài sản trong một hành động tùy chỉnh "trì hoãn" (tức là session["VS2010DEVENV"])

Có cách nào khác để tôi có thể truy xuất các giá trị đó khi cần không?

Trả lời

28

This phải hữu ích. Đặc biệt chú ý đến cuối trang, hướng dẫn 2 bước để chuyển giá trị qua CustomActionData.

Dưới đây là trích đoạn:

Để viết giá trị của một tài sản vào kịch bản cài đặt để sử dụng trong một hành động thực hiện tùy chỉnh thu nhập hoãn lại:

  1. Chèn một hành động tùy chỉnh nhỏ vào quá trình cài đặt chuỗi đặt thuộc tính quan tâm đến thuộc tính có cùng tên với hành động tùy chỉnh thực thi hoãn lại. Ví dụ: nếu khóa chính cho hành động tùy chỉnh thực thi hoãn lại là "MyAction", hãy đặt thuộc tính có tên "Hành động của tôi" cho thuộc tính X mà bạn cần truy xuất. Bạn phải đặt thuộc tính "Hành động của tôi" trong trình tự cài đặt trước hành động tùy chỉnh "Hành động của tôi". Mặc dù bất kỳ loại hành động tùy chỉnh nào có thể đặt dữ liệu ngữ cảnh, nhưng phương pháp đơn giản nhất là sử dụng thuộc tính hành động tùy chỉnh gán (ví dụ: Loại hành động tùy chỉnh 51).
  2. Tại thời điểm trình tự cài đặt được xử lý, trình cài đặt sẽ ghi giá trị của thuộc tính X vào tập lệnh thực thi làm giá trị của thuộc tính CustomActionData.
+3

Cảm ơn [tham khảo ] (http://msdn.microsoft.com/en-us/library/aa370543.aspx). Thuộc tính ** CustomActionData ** hoạt động tốt. Nhưng tôi tự hỏi làm thế nào chúng ta có thể vượt qua nhiều hơn một giá trị. Trong trường hợp của tôi, tôi cần cả hai giá trị VS2010 và thư mục cài đặt. Bạn có thể đưa ra một số gợi ý nếu có thể không? – jcha

+11

Bạn sẽ phải phân tích cú pháp chuỗi bạn chuyển trong hành động tùy chỉnh bị trì hoãn. Ví dụ, bạn có thể truyền '[VS2010DEVENV] | [INSTALLLOCATION]', và chia nhỏ CustomActionData bằng '|' trong CA bị trì hoãn. Nếu bạn sử dụng DTF cho CA của bạn, nó có thuộc tính CustomActionData giống như từ điển và bạn có thể truyền nó như 'vs2010 = [VS2010DEVENV]; location = [INSTALLLOCATION]' và lấy nó như 'session.CustomActionData [" vs2010 "] 'và' session.CustomActionData ["location"] ' –

+0

Tuyệt vời! Nó hoàn toàn giải quyết trường hợp của tôi. Cảm ơn bạn rất nhiều vì lời khuyên của bạn. – jcha

11

chi tiết bổ sung: nhiều giá trị tài sản có thể được thông qua bằng cách sử dụng cú pháp sau đây trong một "Custom Action Loại 51" (mà về cơ bản chỉ là một hành động tùy chỉnh mà bộ giá trị tài sản):

PROPERTY1=Value1;PROPERTY2=Value2;PROPERTY3=... 

giá trị có thể được lấy ra từ bên trong hành động tùy chỉnh như thế này:

string prop1 = session.CustomActionData["PROPERTY1"]; 
string prop2 = session.CustomActionData["PROPERTY2"]; 

Dưới đây là một ví dụ mà bộ giá trị tài sản cho một hành động tùy chỉnh với ID "MyCustomAc tion ":

<CustomAction 
    Id="SetCustomActionPropertyValues" 
    Property="MyCustomAction" 
    Value="INSTALLDIR=[INSTALLDIR];EXECUTABLE=[#MyExecutableFile]" /> 

(đọc this MSDN article để biết thêm chi tiết về cú pháp định dạng mà trong ví dụ này được sử dụng để lấy các cài đặt vị trí của một tập tin với ID 'MyExecutableFile')

+4

Rất cám ơn vì ví dụ cụ thể. Đúng thứ tôi cần. Khách truy cập trong tương lai cũng sẽ thấy [câu trả lời này] (http://stackoverflow.com/a/11233268/660536) để biết thêm chi tiết và ví dụ. – GazTheDestroyer

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