有没有办法从 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
的特殊程序,它似乎能够做到这一点。问题在于它是如何做到的。
最佳答案
我想你会发现你需要自己指定服务名称属性......
...如果您没有设置服务名称,那么它将为空,我认为 sc.exe 首先会通过它,然后根据 exe 名称生成一个服务名称。
还要注意的另一件事是 sc.exe 通过许多“名称”属性/方法来识别服务......
http://support.microsoft.com/kb/251192
...可能是因为您在代码中指定了 serviename,它以某种方式生成了一个。
希望这有助于澄清您的困惑,即使它不能完全解决问题。
关于c# - 当前服务的名称,以防同一个 exe 被设置为多个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689961/