1

我正在开发一个与 Windows 服务进行交互的应用程序。我正在使用ServiceController 类来处理交互,但我想知道如果遇到两个同名的服务会发生什么。

在文档中提供的示例代码中,它们按名称寻址服务,如下所示:

foreach (ServiceController scTemp in scServices)
  if (scTemp.ServiceName == "Simple Service"){  /* Do Work */ }

我没有看到任何要求ServiceName独特的规定。如果两个服务名称相同,但用户只希望与其中一个进行交互,我该如何处理?

4

3 回答 3

4

根据CreateService文档,服务名称必须是唯一的:

ERROR_DUPLICATE_SERVICE_NAME

显示名称已作为服务名称或另一个显示名称存在于服务控制管理器数据库中。

于 2013-08-12T22:27:27.883 回答
2

服务由其 ServiceName 在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 注册表项中注册。用 Regedit.exe 查看它并比较您在迭代 ServiceController.GetServices() 时看到的内容。

所以永远不可能有重复,试图让重复注册会失败。

于 2013-08-12T22:30:32.340 回答
1

服务名称确实需要是唯一的。如果您尝试使用现有名称安装服务,InstallUtil 将引发异常。

于 2013-08-12T22:26:49.587 回答