2011-11-24 33 views
5

Tôi tự hỏi liệu có thể chạy thủ công phần tử RemoveFolderEx từ một hành động tùy chỉnh hay không. Tôi đoán có lẽ không nhưng ai đó có thể biết một cách mà tôi không biết.Wix: Có thể chạy thủ công phần tử RemoveFolderEx từ một hành động tùy chỉnh không?

Vấn đề của tôi là tôi muốn chạy phần tử RemoveFolderEx nhưng chỉ trên một UNINSTALL thực sự tuy nhiên chương trình của tôi thực thi nó khi nâng cấp như tôi đã đặt nó để gỡ cài đặt trước khi cài đặt lại.

Tôi đã thử qua phương pháp này Wix: condition on property not working tuy nhiên nó không hoạt động và vẫn chạy khi cài đặt lại.

Điều duy nhất tôi có thể nghĩ là có thể tự đặt một RemoveFolderEx khỏi hành động tùy chỉnh mà tôi biết rằng tôi chạy đúng điểm và chỉ khi gỡ cài đặt đúng. Có lẽ hành động tùy chỉnh của tôi có thể sử dụng một dll c + + và sau đó tự thêm lệnh vào giao diện MSI nhưng nếu tôi đi xa đến mức có thể chỉ cần viết hoàn toàn bản thân logic xóa.

Cảm ơn. Neil


EDIT: Cuối cùng tôi đã làm việc này, dưới đây là một số ví dụ wix để hiển thị những gì tôi đã làm.

<Property Id='P.REMOVEDATAFOLDER' Secure='yes' /> 

<DirectoryRef Id="DATADIR">   
    <Component Id="C.RemoveDataFolder" Guid="myguid" KeyPath="yes"> 
     <util:RemoveFolderEx On="uninstall" Property="P.REMOVEDATAFOLDER" /> 
    </Component> 
</DirectoryRef> 

<CustomAction Id="CA.SetDataFolder" Property="P.REMOVEDATAFOLDER" Value='[DATADIR]' /> 

<InstallExecuteSequence>   
    <Custom Action="CA.SetDataFolder" Before="ValidateProductID" >(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom> 
</InstallExecuteSequence>  

Thuộc tính P.REMOVEDATAFOLDER chỉ được đặt trên một gỡ bỏ cài đặt đúng ngay sau khi datadir được đọc từ registry nhưng trước khi hành động CostInitialize.

Trả lời

4

Tôi sẽ sử dụng các phương pháp sau đây. Không điều kiện hoạt động RemoveFolderEx, nhưng sử dụng một hành động tùy chỉnh có điều kiện để thiết lập giá trị thích hợp cho thuộc tính đích.

+0

RemoveFolderEx không thể được điều chỉnh tuy nhiên các hành động tùy chỉnh có thể được. Vì vậy, chạy một hành động tùy chỉnh có điều kiện mà sau đó được gọi là một phần tử RemoveFolderEx sẽ có hành vi mà tôi mong muốn. Câu hỏi tôi liên kết là nỗ lực của tôi trong việc đặt một conditon trên một thành phần có chứa một phần tử RemoveFolderEx nhưng điều này không hoạt động như tôi muốn. – Neil

+0

Rất khó gọi cho RemoveFolderEx từ một hành động tùy chỉnh. Những gì tôi đề xuất là đơn giản hơn. Giữ nguyên RemoveFolderEx và chỉ đặt thuộc tính của nó từ một hành động tùy chỉnh. – Ciprian

+0

Xin lỗi tôi không bao giờ hiểu lần đầu tiên xung quanh, điều này thực sự là bang trên tôi nghĩ. Tôi sẽ thử nó và lấy lại cho bạn về việc liệu nó đã thành công. – Neil

0

Tham khảo một số lời khuyên từ this question, điều kiện biểu thị gỡ cài đặt là REMOVE="All" AND NOT UPGRADINGPRODUCTCODE.

Something như thế này có thể làm việc:

<Component Id="RemoveMyFolder"> 
    <Condition> REMOVE="All" AND NOT UPGRADINGPRODUCTCODE </Condition> 
    <RemoveFolderEx ... /> 
</Component> 
+0

Đây là phương pháp tiếp cận ban đầu của tôi tuy nhiên điều này sẽ không bao giờ hoạt động vì thành phần sẽ không bao giờ được cài đặt và do đó không bao giờ có thể bị xóa. Nếu bạn đọc câu hỏi tôi liên kết nó đi vào chi tiết hơn về phương pháp này. – Neil

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