我有一个安装程序,安装了一些组件,包括Windows服务,安装后它将启动使用CustomAction安装到系统上的服务。
卸载应用程序时出现问题,安装程序要求在继续之前关闭应用程序。
我创建了一个停止服务的自定义操作,我使用卸载操作安排了它。
但是在我手动停止服务后按OK确定错误对话框之前,它才会执行。
在Win7上失败了,但我在WinXP上测试了相同的MSI并且工作正常(在检查文件正在使用之前执行了自定义操作)!!!
我正在使用VS2010安装项目来创建安装程序,但在构建之后我没有修改它(例如使用Orca)的问题。
以下是InstallExecuteSequence表的内容:
我发现检查使用中文件的InstallValidate操作,但我无法对我之前停止服务的自定义操作进行排序,因为它之前的InstallInitialize操作需要所有自定义操作在它之后(ICE77 Evaluator)
如果之前对脚本内自定义操作进行了排序,则ICE77会发布错误 InstallInitialize操作或InstallFinalize操作之后。
我应该怎么做,我应该使用MSIRESTARTMANAGERCONTROL属性来指定Windows Installer程序包是否使用FilesInUse对话框功能,但我需要通知用户其他正在使用的文件。
答案 0 :(得分:2)
Windows Installer中有内置功能 - 无需自定义操作。事实上,我强烈建议不要使用自定义操作,除非你的服务非常特殊(例如,停止缓慢,或者需要关闭大量资源,你需要验证它是否这样做)。大多数正常服务在半分钟左右停止。我不确定Windows Installer引擎配置多长时间等待服务停止。
MSI的 ServiceControl table 是“幕后”功能。大多数安装工具都提供向导或GUI元素,以便以更简单的方式控制它。
以下是一个Installshield版本中的服务控制视图: