我需要使用运行我的可执行文件的用户凭据(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
的用户的相同凭据来检查此服务是否正在远程运行/停止答案 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处进行解决。