7

我有一个安装程序,它安装了几个组件,包括 Windows 服务,安装后它将启动使用 CustomAction 安装到系统上的服务。

卸载应用程序时的问题,安装程序要求在继续之前关闭应用程序。

错误对话框

我创建了一个将停止服务的自定义操作,并使用卸载操作安排了它。

但是直到我在手动停止服务后为错误对话框按 OK 后才执行它。

它在 Win7 上失败了,但我在 WinXP 上测试了相同的 MSI 并且工作正常(在检查文件使用中之前执行的自定义操作)!!!

我正在使用 VS2010 安装项目来创建安装程序,但是在构建后修改它(例如使用 Orca)没有问题。

这是 InstallExecuteSequence 表的内容:

在此处输入图像描述

我发现检查 In-Use 文件的InstallValidate操作,但我无法对在它之前停止服务的自定义操作进行排序,因为它在InstallInitialize操作之前需要所有自定义操作都在它之后(ICE77 Evaluator

如果在 InstallInitialize 操作之前或 InstallFinalize 操作之后对脚本内自定义操作进行排序,ICE77 会发布错误。

我应该怎么做,我应该使用指定 Windows Installer 包是否使用 FilesInUse Dialog 功能的MSIRESTARTMANAGERCONTROL属性,但我需要通知用户其他正在使用的文件。

4

1 回答 1

3

Windows Installer 中为此提供了内置功能 - 无需自定义操作。事实上,我强烈建议不要为此使用自定义操作,除非您的服务非常特殊(例如,停止缓慢,或者需要关闭大量资源并且您需要验证它是否这样做)。大多数正常服务会在半分钟左右停止。我不确定 Windows Installer Engine 配置为等待服务停止多长时间。

MSI的ServiceControl 表是对此的“幕后”功能。大多数安装工具都提供类似向导或 GUI 元素来以更简单的方式控制它。

这是一个 Installshield 版本中的服务控制视图:

在此处输入图像描述

于 2014-04-04T11:06:25.613 回答