我想查询在远程计算机上以特定用户身份运行的服务列表,然后检查每个服务的运行状况。 我正在构build一个自定义控制台。
要使用ServiceController方法,我会看看在前面的问题中实现的模拟解决方案: .Net 2.0 ServiceController.GetServices()
FWIW,这里的C#/ WMI方式显式主机,用户名,密码:
using System.Management; static void EnumServices(string host, string username, string password) { string ns = @"root\cimv2"; string query = "select * from Win32_Service"; ConnectionOptions options = new ConnectionOptions(); if (!string.IsNullOrEmpty(username)) { options.Username = username; options.Password = password; } ManagementScope scope = new ManagementScope(string.Format(@"\\{0}\{1}", host, ns), options); scope.Connect(); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, new ObjectQuery(query)); ManagementObjectCollection retObjectCollection = searcher.Get(); foreach (ManagementObject mo in retObjectCollection) { Console.WriteLine(mo.GetText(TextFormat.Mof)); } }
ServiceController.GetServices(“machineName”)为特定机器返回一个ServiceController对象的数组。
这个:
namespace AtYourService { using System; using System.ServiceProcess; class Program { static void Main(string[] args) { ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController service in services) { Console.WriteLine( "The {0} service is currently {1}.", service.DisplayName, service.Status); } Console.Read(); } } }
生产:
应用程序体验服务当前正在运行。
Andrea ST Filters Service服务目前正在运行。
应用程序层网关服务服务当前已停止。
应用程序信息服务当前正在运行。
等等…
当然,我使用无参数版本来获得我的机器上的服务。
您可以使用wmi(System.Management)。 您也可以使用ServiceController.GetServices()。
这将检查您的系统的服务名称与您可以提及参数所需的服务名称
namespace ServiceName { using System; using System.ServiceProcess; class Service { public static bool IsServiceInstalled(string serviceName) { ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController service in services) { if (service.ServiceName == serviceName) return true; } return false; } } }