在运行时更改Windows服务名称

时间:2013-12-19 10:59:32

标签: c# windows-services wmi

我有一些使用installutil手动创建的Windows服务。 它们具有在安装期间分配的非编译时特定名称(例如,MyTest1,MyTest2,...)。

启动服务时,属性“ServiceName”的默认值为“Service1”。 我可以在构造函数中将其更改为例如“MyTest1”,以便在事件日志中显示正确的名称。这很好。

目前我正在从命令行参数中读取名称。我还可以使用WMI从进程ID中获取名称:

string filter = string.Format("SELECT * FROM Win32_Service WHERE ProcessId = {0}", Process.GetCurrentProcess().Id);

ManagementObjectSearcher query = new ManagementObjectSearcher(filter);
ManagementObjectCollection services = query.Get();

string serviceName;

foreach (ManagementObject service in services)
{
    serviceName = service.GetPropertyValue("Name").ToString();
    break;
}

不幸的是,这在服务的构造函数中不起作用,因为它尚未注册 在OnStart()期间检索名称有效,但在服务运行时无法将其分配给“ServiceName”。

有关如何动态获取和分配名称而不使用start参数或cfg?

的任何建议

0 个答案:

没有答案