有没有办法从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
的特殊程序,似乎能够做到这一点。问题是它是如何做到的。
答案 0 :(得分:0)
我想你会发现你需要自己指定servicename属性......
...如果你还没有设置servicename,那么它将为null,我认为sc.exe首先执行,然后根据exe名称生成一个。
另外需要注意的是sc.exe通过许多“名称”属性/方法来识别服务......
http://support.microsoft.com/kb/251192
...也许是因为你在代码中指定了serviename,它以某种方式生成了一个。
希望这有助于澄清您的一些困惑,即使它没有完全解决问题。