请阅读Windows服务的描述
本文关键字:描述 服务 Windows | 更新日期: 2023-09-27 18:13:45
我使用C:'Windows'System32'sc.exe
(通过System.Diagnostics.Process
)通过我构建的自定义安装向导创建几个Windows服务。创建的每个服务将包含一个加载了一个或多个模块的程序(由用户通过向导选择)。
加载此向导时,我希望能够通知用户当前安装了哪些服务和哪些模块。我使用服务描述(sc description "....."
)来编写每个服务的模块。
然而,我找不到一个方法来以编程方式读取服务的描述。我觉得很奇怪,它不是System.ServiceProcess.ServiceController
的一部分
有没有一种方法可以通过c#读取服务的描述?
有一种方法:
using System;
using System.Management;
public static string GetServiceDescription(string serviceName)
{
using (ManagementObject service = new ManagementObject(new ManagementPath(string.Format("Win32_Service.Name='{0}'", serviceName))))
{
return service["Description"].ToString();
}
}
不是所有的服务都在managentobject中返回描述,所以最好使用try catch…
string cDescription = "";
ServiceController[] services = ServiceController.GetServices();
foreach(var serviceItem in services)
{
ManagementObject serviceObject = new ManagementObject(new ManagementPath(string.Format("Win32_Service.Name='{0}'", serviceItem.ServiceName)));
try
{
cDescription = serviceObject["Description"].ToString();
}
catch(Exception ex)
{
cDescription = ex.Message; // or just leave it empty!
}
}
下面是一个完整的例子;System.Management
和System.ServiceProcess
引用要求:
using System;
using System.Management;
using System.ServiceProcess;
var services = ServiceController.GetServices();
foreach (var service in services)
using (var serviceObject = new ManagementObject(new ManagementPath(string.Format("Win32_Service.Name='{0}'", service.ServiceName))))
Console.WriteLine($"{service.ServiceName} - {serviceObject["Description"]?.ToString()}..");