2012-07-05 21 views
8

Tôi muốn thực hiện hành động tùy chỉnh sau khi các tệp được sao chép trong thư mục đích.Cách gọi hành động tùy chỉnh sau khi các tệp được sao chép trong wix

Trong hành động tùy chỉnh, tôi chạy tệp tập lệnh được sao chép để không tìm thấy tệp lỗi.

<CustomAction Id="RunDBScript" 
       BinaryKey="CA" 
       DllEntry="RunDBScript" 
       Execute=" immediate" 
       Return="check" /> 


<Custom Action="RunDBScript" After="InstallFiles"> 
    <![CDATA[NOT Installed]]> 
    </Custom> 

hành động tùy chỉnh này không tìm thấy tệp/thư mục lỗi. vì vậy cuộc gọi hành động này trước khi sao chép tệp.

vậy, cách gọi hành động tùy chỉnh sau khi sao chép tệp?

Tôi không hiểu tại sao lệnh gọi hành động tùy chỉnh này trước InstallFiles mặc dù tôi được chỉ định After = "InstallFiles".

+0

Hãy CA của bạn bị trì hoãn: 'Execute = "trì hoãn"' –

+1

nếu tôi sử dụng Execute = "trì hoãn", sau đó đưa cho tôi lỗi: "Không thể truy cập chi tiết phiên từ một hành động tùy chỉnh không ngay lập tức" –

+4

Làm thế nào đã làm bạn giải quyết vấn đề của bạn? – guiomie

Trả lời

4

Khi bạn sử dụng các hành động tùy chỉnh bị trì hoãn, bạn phải truy cập các giá trị thông qua phiên.CustomActionData ["propertyname"].

Giá trị từ điển phiên có thể chỉ đọc bởi các hành động tùy chỉnh ngay lập tức, nơi tập lệnh thực thi đang được viết.

Hành động tùy chỉnh hoãn lại được thực thi tại thời gian chạy tập lệnh, do đó thuộc tính dự án không còn khả dụng nữa. Để tận dụng nó, bạn phải thực hiện một hành động tùy chỉnh kép để cung cấp các thuộc tính mong muốn cho hành động tùy chỉnh thực sự.

Thực hiện theo các ví dụ dưới đây:

<CustomAction Id="CustomActionID_Data" Property="CustomActionID" Value="INSTALLDIR=[INSTALLDIR];OTHERPROPERTY=[OTHERPRPJECTPROPERTY]"></CustomAction> 
<CustomAction Id="CustomActionID" BinaryKey="FILEBINARYID" DllEntry="METHODNAMEATCUSTOMACTION" Execute="deferred"></CustomAction> 

Tại ví dụ này, bạn cần phải gọi tại InstallExecutionSequence hành động tùy chỉnh "_Data" và sau khi gọi một trong những thực, vì vậy người đầu tiên "_Data" sẽ gia nhập các thuộc tính mong muốn . Sau đó, bạn có thể truy cập các thuộc tính đó trên mã của bạn bằng session.CustomActionData [""].

Chỉ bổ sung, dưới đây là ví dụ về cách gọi hành động tùy chỉnh tại InstallExecuteSequence.

<Custom Action="CustomActionID_Data" After="InstallFiles">NOT (REMOVE="ALL")</Custom> 
<Custom Action="CustomActionID" After="CustomActionID_Data">NOT (REMOVE="ALL")</Custom>