【问题标题】:How to add dependencies to a windows service如何将依赖项添加到 Windows 服务
【发布时间】:2012-09-16 19:36:48
【问题描述】:

如何在 InstallShield 中向 Windows 服务添加依赖项? 我的winservice依赖以下两个服务,所以必须在服务启动前运行:

  1. COMSysApp
  2. 感应

注意:我使用 InstallShield 项目来安装我的服务,而不是 Windows 安装程序类,所以我无法使用 mr. Jerry.Wang 建议在his article

编辑:

如何在 installshield 中添加对 SEN 服务的依赖?

【问题讨论】:

  • @ChristopherPainter,是的,我知道,因此我很困惑。但是当我问王先生我如何定义我的服务的依赖关系时,他只是回答“你的服务依赖于 SENS,它应该在你的服务之前启动”。但是我找不到任何 SENS 或 COMSysApp 的 exe 文件?
  • 在阅读上面链接的文章时,问题是对系统事件通知服务 (SENS) 的依赖,需要在目标服务运行之前启动(使用 svchost)。
  • @kdmurray,谢谢你的回复,你能描述一下什么是svchost吗?
  • FWIW 需要 2 项基本技能才能创建真正优秀的安装程序(或任何与此相关的东西)。 1) 了解需要做什么 2) 了解如何实现。 #1 必须在 #2 之前。

标签: c# windows-services dependencies installshield


【解决方案1】:

如果您对其他服务有依赖关系,ServiceInstall table 有 Dependencies 列来描述这一点:

此列是服务或负载排序组的名称列表 系统必须在此服务之前启动。中的单独名称 按 Nulls 列出。如果服务没有依赖项,则指定 Null 或空字符串。使用语法 [~] 插入 Null。依赖于 组意味着如果至少有一个成员,则该服务可以运行 在尝试启动组的所有成员后,组正在运行。

例如要求系统启动service1和service2, 在启动 ServiceInstall 列中列出的服务之前,输入 service1[~]service2[~][~] 进入依赖列。这 标识符 service1 和 service2 必须出现在主键中 表的名称或已安装的服务的名称。

您必须在组名前加上 + 才能区分它们 从服务名称。要求系统启动 service1 并在 在开始之前的排序组 MyGroup 的至少一个成员 ServiceInstall 列中列出的服务,输入 service1[~]+MyGroup[~][~].

以下是 InstallShield 对他们对该表的表示的看法:

Services Settings

输入此服务所需的任何服务或加载排序组。在启动此服务之前,系统会尝试启动相关服务或加载排序组的至少一个成员。

使用逗号 (,) 分隔多个依赖项。

您必须在每个加载排序组的名称前加上 SC_GROUP_IDENTIFIER — 通常是加号 (+) — 这样 服务控制管理器可以将其与服务区分开来。

【讨论】:

  • 我已经尝试过这种方式,并在创建后将依赖项添加到ServiceComponent的依赖属性中,但它不起作用!但是,当我在 ServiceComponent 向导中添加它们时,它们已成功添加为服务的依赖项!!?
【解决方案2】:

我自己通过在ServiceComponent Wizard中添加依赖解决了这个问题。

【讨论】:

    猜你喜欢
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2016-11-24
    • 2015-10-12
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多