出于某些原因,我希望我的安装程序安装的服务能够在全新安装时自动启动 但 <升级时,em> not 。看起来ServiceControl Element不允许这么精细的粒度。
我目前的代码如下:
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="both" Name="MyService" Wait="no"/>
有没有办法实现这个目标?也许使用CustomAction而不是ServiceControl元素?
答案 0 :(得分:1)
如果您已经发布了以前的MSI版本,则为StartServices操作添加条件为时已晚 - UPGRADINGPRODUCTCODE用于升级的旧设置,而不是较新的设置。在任何情况下,在升级期间,您需要在较新的升级安装中使用条件,因为这将是实际启动服务的条件,而不是正在卸载的旧服务。在检测到旧版本时设置的新安装的升级信息中需要“OLDERPRODUCTFOUND”或等效属性,并在条件中使用该属性。请注意,StartServices适用于所有服务,而不仅仅适用于所有服务,因此如果您不希望所有服务出现此行为,则需要另一种解决方案。
答案 1 :(得分:0)
您可以尝试在StartServices自定义aciton上添加条件,例如:
<InstallExecuteSequence>
<StartServices Sequence="5900">
<![CDATA[VersionNT AND NOT UPGRADINGPRODUCTCODE]]>
</StartServices>
</InstallExecuteSequence>
我没有测试过这个确切的条件,特别是UPGRADINGPRODUCTCODE,但是我在同一个自定义操作(StartServices)上使用了不同的条件,这是出于我自己的目的而且完美无缺。