c# - 当前服务的名称,以防同一个 exe 被设置为多个服务

标签 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 的特殊程序,它似乎能够做到这一点。问题在于它是如何做到的。

最佳答案

我想你会发现你需要自己指定服务名称属性......

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

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

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

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

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

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

关于c# - 当前服务的名称,以防同一个 exe 被设置为多个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689961/

相关文章:

service - Consul:在不知道现有成员IP的情况下加入

multithreading - delphi xe下服务应用程序中的线程不起作用

c# - 通过 jquery 在中继器内单击复选框

c# - 将 xaml 文件及其关联的 xaml.cs 添加到 VS2010 项目中的步骤

windows - 如何通过批处理文件检查服务是否正在运行并启动它,如果它没有运行?

.net - 在 Windows 服务启动时等待网络配置完成

c# - 根据属性名称数组创建对象的子集

c# - 如何按一个属性对 CollectionViewSource 进行排序,然后按另一个属性排序作为决胜局?

c# - 服务与流程

svn - 设置visual SVN Server后无法浏览仓库