2012-03-08 22 views

Trả lời

13

Vì vậy, giải pháp cuối cùng là như này:

<CustomAction Id="Install" Directory="APPLICATIONROOTDIRECTORY" 
       Execute="deferred" Impersonate="no" Return="ignore" 
       ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -install" /> 

<CustomAction Id="Uninstall" Directory="APPLICATIONROOTDIRECTORY" 
       Execute="deferred" Impersonate="no" Return="ignore" 
       ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -uninstall" /> 

<InstallExecuteSequence> 

    <Custom Action='Install' After='InstallFiles' > 
    $ProductComponent = 3 
    </Custom> 

    <Custom Action='Uninstall' After='InstallInitialize' > 
    ?ProductComponent = 3 
    </Custom> 

</InstallExecuteSequence> 

Bất kỳ lời khuyên nào để cải thiện nó?

+0

ProductComponent là gì? –

17

Có một cái nhìn tại blog này tại phần Làm thế nào để tác giả hành động đòi hỏi đặc quyền quản trị

Một link khác mà thực sự giải thích tất cả các loại hành động tùy chỉnh tùy chỉnh. Phần tử CustomAction trong Wix.

Điều này sẽ giúp bạn nhiều hơn một chút.

Sau khi xem xét giải pháp của bạn, bạn dường như đang làm một CustomAction Loại 18, ở đây tôi dán nội dung của Blog trước đối với những loại:

Tuỳ chỉnh Action Loại 18 kêu gọi một thực thi được cài đặt với ứng dụng trong phiên hiện tại. Cột Nguồn trong bảng CustomAction chứa khóa để ghi trong bảng Tệp.

Cột Mục tiêu trong bảng CustomAction chứa chuỗi dòng lệnh cho tệp thực thi. Tất cả tùy chọn xử lý trả lại, lập lịch thực thi và tùy chọn thực thi trong tập lệnh đều được áp dụng.

Bởi vì tập tin được cài đặt với các ứng dụng, có trình tự hạn chế đối với tùy chỉnh Loại hành động 18:

If the source file is not already installed on the computer: 
    Custom action must be sequenced after CostFinalize action because only after this action path to the file can be resolved. 
If the source file is not already installed on the computer: 
    Deferred custom actions of this type must be sequenced after the InstallFiles action. 
    Non-deferred custom actions of this type must be sequenced after the InstallFinalize action. 

Entry điểm để hành động tùy chỉnh nhận được xử lý với phiên cài đặt. Trong quá trình thực hiện hành động tùy chỉnh hoãn lại, phiên có thể không còn tồn tại. Để có được giá trị của các thuộc tính sử dụng thuộc tính CustomActionData.

Sau đây là cách để thêm Loại 18 hành động tùy chỉnh trong Wix:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Component Id="Component1" 
      Guid="*"> 
    <File Id="MyCA" Name="MyCA.exe" /> 
    </Component> 
</Directory> 

<CustomAction Id="DoSomething" 
       FileKey="MyCA" 
       ExeCommand="-switch" 
       Execute="deferred" 
       Return="check" 
       HideTarget="no" 
       Impersonate="no" /> 

<InstallExecuteSequence> 
    <Custom Action="DoSomething" Before="InstallFinalize" /> 
</InstallExecuteSequence> 

Đầu tiên, chúng ta thêm MyCA.exe vào bảng Tệp.

Chúng tôi cũng thêm hành động tùy chỉnh của Loại 18 vào bảng Hành động tùy chỉnh. Thuộc tính FileKey trỏ đến phần tử có dll hành động tùy chỉnh. Thuộc tính ExeCommand chỉ định chuỗi dòng lệnh cho tệp thực thi.

Điều cuối cùng cần làm là lập lịch hành động tùy chỉnh của chúng tôi trong tất cả các bảng thứ tự bắt buộc.

Điều này sẽ giúp bạn ra ngoài, sắp xếp những gì là mất tích, nhưng tôi đề nghị rằng bạn xem xét tất cả các loại hành động tùy chỉnh sẽ giúp bạn sau này khi thực hiện nhiều hơn các trình cài đặt

+0

này là không đủ để làm cho nó làm việc. Cần cài đặt hành động tùy chỉnh vào đúng trình tự và sử dụng các điều kiện phù hợp để xử lý kịch bản nâng cấp, sửa chữa, v.v. ( – user626528

+0

Nhưng điều này trả lời cho câu hỏi của bạn). để phát triển ý tưởng hơn nữa để xây dựng những gì bạn cần –

+2

@Yan Sklyarenko, điều đó không phải là 10% câu trả lời thực sự – user626528

5

Bạn có thể thêm 'KHÔNG XÓA' để cài đặt & Trình tự sửa chữa. Và 'Cài đặt VÀ (XÓA = "TẤT CẢ")' chỉ cho chuỗi UnInstall.

<InstallExecuteSequence> 
     <Custom Action='Install' After='InstallFiles' > 
     NOT REMOVE 
     </Custom> 

     <Custom Action='Uninstall' After='InstallFiles' > 
     Installed AND (REMOVE = "ALL") 
     </Custom> 

    </InstallExecuteSequence> 
0

Hy vọng điều này sẽ giúp ích cho một ai đó đang gặp khó khăn với Wix Tool Set Tags: CustomAction, InstallExecuteSequence, Chạy exe sau Wix Cài đặt hoàn tất, Binary hoặc Resource file trong Wix

Mặc dù, không thể tìm thấy như thế nào được thực hiện từ bootstrapper

file Name: Product.wxs

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" Name="TestingQtExec" Language="1033" Version="1.0.0.0" 
      Manufacturer="My Company" UpgradeCode="PUT-GUID-HERE"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

    <MediaTemplate EmbedCab="yes" /> 

    <Feature Id="ProductFeature" Title="TestingQtExec" Level="1"> 
     <ComponentGroupRef Id="ProductComponents" /> 
    </Feature> 

    <Binary Id="WixCA1" 
       SourceFile="FTDI.exe"/> 

    <!-- install plugin --> 
    <CustomAction Id="FTDIInstall" 
       BinaryKey ="WixCA1" 
       ExeCommand="/passive" 
       Execute="commit" 
       Return="asyncNoWait" 
       HideTarget="no" 
       Impersonate="no" /> 


    <InstallExecuteSequence> 

     <Custom Action="FTDIInstall" Before="InstallFinalize" /> 
    </InstallExecuteSequence> 

       </Product> 

    <Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLFOLDER" Name="TestingQtExec" /> 
     </Directory> 
    </Directory> 
    </Fragment> 

    <Fragment> 
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
     <Component Id="cmpSampleTXT" Guid="*"> 
     <File Source="Sample.txt" /> 
     </Component> 
    </ComponentGroup> 
    </Fragment> 
</Wix> 
+0

Bạn có thể giải thích cách trả lời câu hỏi áp phích gốc này không? – Kmeixner

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