【问题标题】:Prevent services from losing settings on major upgrade in WiX防止服务在 WiX 的重大升级时丢失设置
【发布时间】:2013-04-30 18:57:43
【问题描述】:

我正在尝试防止我的服务在我的 WiX 安装程序的主要升级中丢失其设置(凭据和其他选项)。 我遵循了here 的建议,我正在尝试使用

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

谢谢!

【问题讨论】:

    标签: service wix upgrade wix3.7


    【解决方案1】:

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

    我将它添加到我的 InstallExecuteSequence 块中,它似乎成功了

    <InstallServices>NOT WIX_UPGRADE_DETECTED</InstallServices>
    

    感谢斯蒂芬的帮助!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢,我不认为这是两个独立的过程。旧产品在 DeleteServices 上确实具有“未升级产品代码”条件。我还没有在任何地方部署它,我仍在测试它。所以我的旧产品与我的新产品相同,只是我增加了产品版本的构建。此外,“跳过操作:DeleteServices”在日志中排在第一位,“执行操作:DeleteServices”排在第二位。所以我假设实际上卸载旧产品正在做我想要的,它是删除服务的新产品的安装。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多