【发布时间】:2010-01-13 15:42:19
【问题描述】:
问题
我有一个 MSI,它在安装期间创建和启动 Windows 服务,并在卸载期间停止和删除该服务。这在自行安装和卸载时可以正常工作,但是在升级时,会显示 Files in Use 对话框(仅适用于 Vista 及更高版本,由于新的Restart Manager),表明该服务正在使用中.
背景
Files in Use 对话框在 InstallExecute 序列期间由 InstallValidate 自定义操作显示,该操作安排在 InstallValidate 自定义操作之前strong>RemoveExistingProducts 自定义操作;这意味着之前的版本还没有被卸载,所以应该显示Files in Use对话框。
MSDN 文档指出 RemoveExistingProducts 动作必须安排在 InstallValidate 动作之后,我目前将 RemoveExistingProducts 动作安排在紧随其后InstallValidate 操作。
潜在解决方案
我想将 RemoveExistingProducts 自定义操作重新安排在 InstallValidate 自定义操作之前,以便之前的安装有机会在 InstallValidate 自定义操作之前停止并删除服务显示strong>正在使用的文件对话框。我尝试重新安排这些操作,它似乎可以正常工作,没有不良副作用(尽管日志仍然表明 InstallValidate 操作在 RemoveExistingProducts 操作之前执行),但是我对使用此解决方案犹豫不决,因为它违反了 MSDN 文档,并且可能存在我还没有看到的不利影响。
有人试过吗?我能想到的唯一其他选择是让新安装停止旧安装的服务,但这是不可取的,因为它要求安装具有有关它可以升级的所有旧安装的信息(停止此特定服务可能涉及更多而不仅仅是简单地调用服务管理器来停止它)。
【问题讨论】:
标签: windows-installer custom-action