Service 如何查询WMI以了解启动服务的用户的名称?
我在wbemtest中使用了几个WMI查询,试图找出哪个用户启动了特定的服务。让我走到这一步的就是这里。 我知道如果我查询win32_服务对象,如:Service 如何查询WMI以了解启动服务的用户的名称?,service,wmi,Service,Wmi,我在wbemtest中使用了几个WMI查询,试图找出哪个用户启动了特定的服务。让我走到这一步的就是这里。 我知道如果我查询win32_服务对象,如: select * from win32_service where name like '%SERVICENAME%' 我只得到了一个我正在寻找的服务的结果,然后我双击它浏览服务属性,发现有一个名为StartName的属性,它显示启动它的用户的名称,这就是我想要的 现在,当我这样做时,问题就开始了: select StartName from
select * from win32_service where name like '%SERVICENAME%'
我只得到了一个我正在寻找的服务的结果,然后我双击它浏览服务属性,发现有一个名为StartName的属性,它显示启动它的用户的名称,这就是我想要的
现在,当我这样做时,问题就开始了:
select StartName from win32_service where name like '%SERVICENAME%'
我得到Win32_服务=:
即使没有where子句,它也显示相同的内容
我缺少什么来让它工作呢?这是一个展示的东西。您的查询有效,如果双击结果,您将看到服务的StartName: 我猜这是因为您没有选择键属性名称。如果将名称添加到查询中,将在结果中看到Win32_Service.Name=Name 顺便说一句,在代码中,无论是否查询键属性,您都将获得所选属性和键属性: 'VBScript示例 strComputer=。 设置objWMIService=GetObjectwinmgmts:\\&strComputer&\root\CIMV2 设置colItems=objWMIService.ExecQuery_ 从Win32_服务中选择StartName,其中的名称类似于“%winmgmt%”,48 对于每个对象,在colitem中
Echo Name:&objItem.Name'我为C编写了一个实际工作的代码
public Service GetServiceDetails(string serviceName)
{
using (var managementBaseObject = new ManagementObjectSearcher(new SelectQuery(string.Format("SELECT * FROM Win32_Service WHERE Name = '{0}'", serviceName))).Get())
{
ManagementObject mo = managementBaseObject.Cast<ManagementObject>().FirstOrDefault();
if (mo == null) return null;
var service = new Service
{
AcceptPause = mo["AcceptPause"] != null && (bool) mo["AcceptPause"],
AcceptStop = mo["AcceptStop"] != null && (bool)mo["AcceptStop"],
Caption = mo["Caption"] != null ? mo["Caption"].ToString() : string.Empty,
Description = mo["Description"] != null ? mo["Description"].ToString() : string.Empty,
DisplayName = mo["DisplayName"] != null ? mo["DisplayName"].ToString() : string.Empty,
Name = mo["Name"] != null ? mo["Name"].ToString() : string.Empty,
PathName = mo["PathName"] != null ? mo["PathName"].ToString() : string.Empty,
ProcessId = mo["ProcessId"] != null ? Convert.ToInt32(mo["ProcessId"]) : 0,
ServiceType = mo["ServiceType"] != null ? mo["ServiceType"].ToString() : string.Empty,
Started = mo["Started"] != null && (bool)mo["Started"],
StartMode = mo["StartMode"] != null ? mo["StartMode"].ToString() : string.Empty,
StartName = mo["StartName"] != null ? mo["StartName"].ToString() : string.Empty,
State = mo["State"] != null ? mo["State"].ToString() : string.Empty,
Status = mo["Status"] != null ? mo["Status"].ToString() : string.Empty,
};
return service;
}
}
对我来说效果很好:从win32_服务中选择StartName,其中类似“%winmgmt%”的名称返回StartName=localSystem的服务。你在用什么操作系统?你能发布一个完整的代码示例来说明你看到的行为吗?谢谢Helen,我正在Windows 8.1x64上使用wbemtest.exe,尽管我不确定它的行为是否会如此不同。我今天也会在我的Hyper-V Windows7x64虚拟机上尝试一下,看看它是否在那里工作。运气不好,结果也一样