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

C# 如果将同一exe设置为多个服务,则当前服务的名称,c#,windows-services,service,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,但它只是空的 我尝试

有没有办法从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
的特殊程序,它似乎能够做到这一点。问题是它是如何做到的。

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

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

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

。。。可能是因为您在代码中指定了服务名,所以它以某种方式生成了一个服务名


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

我可以看出它与