区分具有相同名称的Windows服务?

时间:2013-08-12 22:07:19

标签: c# windows-services

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

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

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

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

3 个答案:

答案 0 :(得分:3)

根据CreateService documentation

,服务名称必须是唯一的
  

ERROR_DUPLICATE_SERVICE_NAME

     

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

服务名称确实必须是唯一的。如果您尝试安装具有现有名称的服务,InstallUtil将引发异常。