防止服务在WiX主要升级时丢失设置

问题描述:

我试图阻止我的服务在我的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> 

谢谢!

看来我的问题并不是服务被删除,而是新产品的安装导致我失去了我的服务设置。

我加入到这个我InstallExecuteSequence块,它似乎已经完成了招

<InstallServices>NOT WIX_UPGRADE_DETECTED</InstallServices> 

感谢您的帮助斯蒂芬!

在一次重大升级中,请记住您将运行两个执行顺序,一个用于卸载旧产品,另一个用于安装新产品。我怀疑你的问题来自旧产品的卸载。旧产品是否具有“... AND NOTGRADINGPRODUCTCODE”条件以在旧产品卸载时抑制DeleteServices操作?在尝试升级之前,您必须找到一种方法来修补旧产品以插入该条件。

+0

谢谢,我没有把它看成两个独立的过程。 较旧的产品在DeleteServices上具有'NOT UPGRADINGPRODUCTCODE'条件。我没有在任何地方部署它,我仍在测试它。所以我的旧产品与我的新产品相同,只是增加了产品版本的构建。 另外,“跳过动作:DeleteServices”在日志中排在第一位,“Doing action:DeleteServices”排在第二位。所以我会假设实际上旧产品的卸载正在做我想要的,这是删除服务的新产品的安装。 – Brian 2013-05-07 18:01:30