远程检查服务状态

时间:2014-03-21 12:50:54

标签: c# winforms

我需要使用运行我的可执行文件的用户凭据(winform)远程获取服务状态(运行,停止)。

WMI是最好的方法吗?

我需要这个查询才能在windows上工作(7,2003,2008,2012)。有人指出我正确的方向。

if (RemoteOSversion.Contains("Windows 7"))
{
    var Windows7Query = xdoc.Elements("OS").Elements("Windows7");
    foreach (var myServices in Windows7Query)
    {
        var ServicesQuery = myServices.Elements("Services");
        foreach (var ServiceName in ServicesQuery)
        {
            var ServiceOutput = ServiceName.Value;
        }
    }
}

ServiceOutput是服务名称。我需要使用运行我的exe

的用户的相同凭据来检查此服务是否正在远程运行/停止

2 个答案:

答案 0 :(得分:3)

WMI非常简单

var sc = new ServiceController(ServiceName, MachineName);
string result = sc.Status.ToString();

答案 1 :(得分:0)

是的,使用WMI。

WMI有一种名为WQL的查询语言,类似于SQL。您可以使用System.Management类在C#中执行这些操作。

要使用WMI,您需要添加对System.Management程序集的引用。然后,您可以按如下方式为WMI提供程序建立连接(即ManagementScope):

ConnectionOptions options = new ConnectionOptions();

// If we are connecting to a remote host and want to
// connect as a different user, we need to set some options
//options.Username = 
//options.Password =
//options.Authority = 
//options.EnablePrivileges = 

// If we are connecting to a remote host, we need to specify the hostname:
//string providerPath = @"\\Hostname\root\CIMv2";
string providerPath = @"root\CIMv2";

ManagementScope scope = new ManagementScope(providerPath, options);
scope.Connect();

您可以在Microsoft Docs了解有关WMI的更多信息,并在working-with-windows-services-using-csharp-and-wmi处进行解决。