可以在InstallValidate之前安排RemoveExistingProducts自定义操作吗?

Kev*_*ler 8 windows-installer custom-action

问题

我有一个MSI,在安装过程中创建并启动Windows服务,并在卸载过程中停止并删除该服务.这单独安装和卸载时工作正常,但在升级时,将显示"正在使用文件"对话框(仅在Vista及更高版本,因为新的重新启动管理器),表明该服务正在使用中.

背景

InstallValidate自定义操作在InstallExecute序列期间显示"正在使用文件"对话框,该操作紧接在RemoveExistingProducts自定义操作之前安排; 这意味着尚未卸载以前的版本,因此显示"正在使用文件"对话框.

MSDN文档指出必须在InstallValidate操作之后安排RemoveExistingProducts操作,并且我当前在InstallValidate操作之后立即安排RemoveExistingProducts操作.

潜在解决方案

我想在InstallValidate自定义操作之前立即重新安排RemoveExistingProducts自定义操作,以便先前的安装有机会在显示"正在使用文件"对话框之前停止并删除该服务.我尝试重新安排操作,它似乎正常工作,没有任何不利的副作用(虽然日志仍然表明InstallValidate操作在RemoveExistingProducts操作之前执行),但我犹豫是否使用此解决方案,因为它违反了MSDN文档,我可能还没有看到可能产生的不利影响.

有没人试过这个?我能想到的唯一其他选择是让新安装停止旧安装的服务,但这是不可取的,因为它要求安装有关于它可以升级的所有旧安装的信息(停止此特定服务可能涉及更多而不只是简单地调用服务管理器来阻止它).

Kev*_*ler 6

我实现了问题中概述的潜在解决方案,在InstallValidate之前立即安排RemoveExistingProducts.我还没有看到任何问题,但我会在安装得到更多使用后再次发布.

更新

我们的安装已经使用了一段时间了,我没有注意到任何不良影响.

  • 我尝试了`<RemoveExistingProducts Before ="InstallValidate"/>`,但它导致违反ICE27:InstallExecuteSequence表中的'RemoveExistingProducts'操作错误的地方.当前:选择,正确:执行 (2认同)