2013-05-06 32 views
9

Tôi đang cố ngăn các dịch vụ của mình mất cài đặt (thông tin đăng nhập và các tùy chọn khác) về các bản nâng cấp chính trong trình cài đặt WiX của tôi. Tôi làm theo các lời khuyên here, và tôi đang cố gắng sử dụngNgăn dịch vụ mất cài đặt khi nâng cấp lớn trong WiX

<InstallExecuteSequence> 
    <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices> 
</InstallExecuteSequence> 

Nhưng dịch vụ của tôi vẫn đang được cài đặt lại trên nâng cấp, mất thông tin của tôi và cài đặt dịch vụ khác trên từng nâng cấp.

Trong nhật ký, có vẻ như điều kiện của tôi chỉ được vinh danh một lần. Tôi thấy

MSI (s) (6C:E8) [16:52:53:944]: Skipping action: DeleteServices (condition is false) 

và sau đó một vài trăm dòng sau, tôi thấy

MSI (s) (6C:A4) [16:52:54:873]: Doing action: DeleteServices 

Vì vậy, nó xuất hiện với tôi rằng DeleteServices thứ hai là vấn đề của tôi. Bất cứ ai có thể cho tôi biết làm thế nào tôi có thể ngăn chặn thứ hai, hoặc những gì tôi đang làm để gây ra nó?

Tôi đang sử dụng bộ công cụ WiX 3.7. Đây là mã của tôi.

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id='*' Name='My Product' Language='1033' 
      Version='1.0.6' Manufacturer='Me' UpgradeCode='PUT-GUID-HERE' > 
    <Package Description='My Product' Platform='x86' Id='*' 
      Manufacturer='Me' InstallerVersion='200' Compressed='yes' /> 

    <MajorUpgrade DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."/> 
    <InstallExecuteSequence> 
     <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices> 
    </InstallExecuteSequence> 

    <Media Id='1' Cabinet='product.cab' EmbedCab='yes' /> 

    <Directory Id='TARGETDIR' Name='SourceDir'> 
     <Directory Id='ProgramFilesFolder' Name='PFiles'> 
     <Directory Id='AgentDir' Name='Agent'> 
      <Component Id='Binaries' Guid='PUT-GUID-HERE' Win64='no'> 
      <File Id='AgentExe' Source='../MyProduct/MyExe.exe' KeyPath='yes' ProcessorArchitecture='x86' /> 
      <ServiceInstall Id="TheServiceInstall" Description="[ProductName]" EraseDescription="no" DisplayName="[ProductName]" ErrorControl="normal" Interactive="no" Name="[ProductName]" Start="auto" Type="ownProcess" Vital="yes"> 
      </ServiceInstall> 
      </Component> 
     </Directory> 
     </Directory> 
    </Directory> 

    <Feature Id='CompleteInstall' Title='My Product' Level='1'> 
     <ComponentRef Id='Binaries' /> 
    </Feature> 
    </Product> 
</Wix> 

Cảm ơn!

Trả lời

8

Dường như vấn đề của tôi không phải là các dịch vụ đã bị xóa, đó là cài đặt sản phẩm mới khiến tôi mất cài đặt dịch vụ của mình.

tôi thêm này vào khối InstallExecuteSequence của tôi, và nó dường như đã làm các trick

<InstallServices>NOT WIX_UPGRADE_DETECTED</InstallServices> 

Cảm ơn bạn đã giúp đỡ Stephen!

1

Trong bản nâng cấp lớn, hãy nhớ rằng bạn sẽ chạy hai chuỗi thực thi, một để gỡ cài đặt sản phẩm cũ và một để cài đặt sản phẩm mới. Tôi nghi ngờ vấn đề của bạn xuất phát từ việc gỡ cài đặt sản phẩm cũ hơn. Sản phẩm cũ có điều kiện "... VÀ không UPGRADINGPRODUCTCODE" để loại bỏ hành động DeleteServices khi sản phẩm cũ được gỡ cài đặt? Bạn sẽ phải tìm cách vá lỗi sản phẩm cũ để chèn điều kiện đó trước khi bạn thử nâng cấp.

+0

Cảm ơn, tôi không nghĩ đó là hai quy trình riêng biệt. Sản phẩm cũ hơn có điều kiện 'KHÔNG UPGRADINGPRODUCTCODE' trên DeleteServices. Tôi đã không triển khai nó ở bất cứ đâu, tôi vẫn đang thử nghiệm nó. Vì vậy, sản phẩm cũ của tôi giống hệt sản phẩm mới của tôi, ngoại trừ việc tôi tăng Phiên bản sản phẩm. Ngoài ra, "Hành động bỏ qua: DeleteServices" xuất hiện đầu tiên trong nhật ký, "Hành động: Xóa dịch vụ" đến thứ hai. Vì vậy, tôi cho rằng thực sự việc gỡ cài đặt sản phẩm cũ đang làm những gì tôi muốn, đó là cài đặt của sản phẩm mới đang xóa dịch vụ. – Brian