2013-05-06 110 views
9

我試圖阻止我的服務在我的WiX安裝程序的主要升級中丟失其設置(憑據和其他選項)。 我跟着建議here,我試圖用防止服務在WiX主要升級時丟失設置

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

但我的服務仍然被上升級重裝,失去在每次升級我的憑據和其他服務設置。

在日誌中,它看起來像我的條件只被授予一次。我看到

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

,然後幾百行後,我看到

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

所以,在我看來,第二DeleteServices是我的問題。任何人都可以告訴我如何抑制第二個,或者我正在做什麼導致它?

我使用的是WiX工具集3.7。 這是我的代碼,顯然刪除了guid。

<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> 

謝謝!

回答

8

看來我的問題並不是服務被刪除,而是新產品的安裝導致我失去了我的服務設置。

我加入到這個我InstallExecuteSequence塊,它似乎已經完成了招

<InstallServices>NOT WIX_UPGRADE_DETECTED</InstallServices> 

感謝您的幫助斯蒂芬!

1

在一次重大升級中,請記住您將運行兩個執行順序,一個用於卸載舊產品,另一個用於安裝新產品。我懷疑你的問題來自舊產品的卸載。舊產品是否具有「... AND NOTGRADINGPRODUCTCODE」條件以在舊產品卸載時抑制DeleteServices操作?在嘗試升級之前,您必須找到一種方法來修補舊產品以插入該條件。

+0

謝謝,我沒有把它看成兩個獨立的過程。 較舊的產品在DeleteServices上具有'NOT UPGRADINGPRODUCTCODE'條件。我沒有在任何地方部署它,我仍在測試它。所以我的舊產品與我的新產品相同,只是增加了產品版本的構建。 另外,「跳過動作:DeleteServices」在日誌中排在第一位,「Doing action:DeleteServices」排在第二位。所以我會假設實際上舊產品的卸載正在做我想要的,這是刪除服務的新產品的安裝。 – Brian 2013-05-07 18:01:30