如果将相同的exe设置为多个服务,则为当前服务的名称

时间:2010-04-22 10:25:44

标签: c# windows-services service

有没有办法从C#获取当前服务在安装时注册的服务名称。

例如,我注册了两次相同的服务:

sc.exe create ServiceName1 binPath= D:\myservice.exe
sc.exe create ServiceName2 binPath= D:\myservice.exe

在我的服务中,我实际上想知道我是ServiceName1还是ServiceName2。但似乎没有办法做到这一点。

我在设置之前尝试调用ServiceBase.ServiceName,但它只是空的。

我尝试了ServiceController.GetServices().Where(svc => svc.ServiceHandle.DangerousGetHandle() == myservice.ServiceHandle),但它似乎得到了另一个句柄,所以它们不可比较。

有一个名为SRVANY.exe的特殊程序,似乎能够做到这一点。问题是它是如何做到的。

1 个答案:

答案 0 :(得分:0)

我想你会发现你需要自己指定servicename属性......

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.servicename(VS.80).aspx

...如果你还没有设置servicename,那么它将为null,我认为sc.exe首先执行,然后根据exe名称生成一个。

另外需要注意的是sc.exe通过许多“名称”属性/方法来识别服务......

http://support.microsoft.com/kb/251192

...也许是因为你在代码中指定了serviename,它以某种方式生成了一个。

希望这有助于澄清您的一些困惑,即使它没有完全解决问题。