【问题标题】:Stop windows service before perform the uninstallation在执行卸载之前停止 Windows 服务
【发布时间】:2013-08-20 17:59:15
【问题描述】:

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

当我卸载应用程序时,安装程​​序要求在继续之前关闭应用程序。

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

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

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

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

这是 InstallExecuteSequence 表的内容:

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

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

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

【问题讨论】:

  • 我在 VS2015 中使用 Windows 安装程序遇到了同样的问题。你是怎么摆脱这个的?
  • 您需要应用下面的答案,但由于您使用的是 VS 安装程序项目,您将无法自动将该行添加到该表中。我建议创建一个构建后操作来执行 - 例如 - 一个手动插入该行的 JScript 文件(检查stackoverflow.com/questions/8318920/…)以进行示例行插入

标签: windows-installer custom-action orca


【解决方案1】:

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

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

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

【讨论】:

  • 这几乎对我有用,但似乎缺少一些东西。 IS会安装/删除服务,但是这样安装后就不能运行了!当我使用自定义安装时,其中一部分是为在 exe 中找到的服务提供类名。这里没有任何论据。 (此服务是用 Python 编写的,但使用 pyInstaller 转换为 exe)。我可以通过 CA 安装/卸载,但我被困在此处发布的原始问题上!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多