如何在Wix安装程序的StopServices与StartServices间添加自定义操作?
Wix安装程序:将自定义操作调度在StopServices与StartServices之间
解决核心错误:移除冲突属性
Wix的<Custom>元素不允许同时指定After和Before属性,这是触发CNDL0035错误的直接原因。只需保留其中一个属性即可实现需求——由于内置的StartServices操作默认在StopServices之后执行,因此只需将自定义操作绑定到StopServices之后,就能自动插入到两者之间的执行顺序中。
正确调度代码示例
在InstallExecuteSequence中声明自定义操作:
<InstallExecuteSequence> <!-- 仅保留After属性,绑定到StopServices之后 --> <Custom Action="IisRewriteRules" After="StopServices">NOT REMOVE~="ALL"</Custom> </InstallExecuteSequence>
无需手动控制服务的原因
你完全不需要通过ServiceControl手动启停服务,因为:
StopServices是Wix内置操作,会自动停止所有安装包中标记为ServiceControl且需要停止的服务StartServices同样是内置操作,会在后续步骤自动启动这些服务- 只要自定义操作被调度在这两个内置操作之间,执行时服务必然处于停止状态
额外注意事项
- 确保
InstallExecuteSequence中的声明是最终生效的调度规则,避免其他Sequence设置覆盖顺序 - 验证条件
NOT REMOVE~="ALL"是否覆盖了所有需要执行自定义操作的场景(比如安装、升级、修复,排除完全卸载)
内容的提问来源于stack exchange,提问作者woutervanrobays
相关产品推荐
相关产品推荐

