Win32_Service 类

Win32_ServiceWMI 类表示运行 Windows 的计算机系统上的服务。

以下语法从托管对象格式 (MOF) 代码中简化,包括所有继承的属性。 属性和方法按字母顺序排列,而不是按 MOF 顺序排列。

语法

[Dynamic, Provider("CIMWin32"), SupportsUpdate, UUID("{8502C4D9-5FBB-11D2-AAC1-006008C78BC7}"), DisplayName("Services"), AMENDMENT]
class Win32_Service : Win32_BaseService
{
  boolean  AcceptPause;
  boolean  AcceptStop;
  string   Caption;
  uint32   CheckPoint;
  string   CreationClassName;
  boolean  DelayedAutoStart;
  string   Description;
  boolean  DesktopInteract;
  string   DisplayName;
  string   ErrorControl;
  uint32   ExitCode;
  datetime InstallDate;
  string   Name;
  string   PathName;
  uint32   ProcessId;
  uint32   ServiceSpecificExitCode;
  string   ServiceType;
  boolean  Started;
  string   StartMode;
  string   StartName;
  string   State;
  string   Status;
  string   SystemCreationClassName;
  string   SystemName;
  uint32   TagId;
  uint32   WaitHint;
};

成员

Win32_Service 类具有以下类型的成员:

方法

Win32_Service 类具有以下方法。

方法 说明
改变 修改服务。
ChangeStartMode 修改服务的启动模式。
创建 创建一项新服务。
删除 删除现有服务。
GetSecurityDescriptor 返回控制对服务的访问的安全描述符。
InterrogateService 请求服务将其状态更新到服务管理器。
PauseService 尝试将服务置于暂停状态。
ResumeService 尝试将服务置于恢复状态。
SetSecurityDescriptor 编写安全描述符的更新版本,用于控制对服务的访问。
StartService 尝试将服务置于启动状态。
StopService 将服务置于停止状态。
UserControlService 尝试将用户定义的控制代码发送到服务。

 

属性

Win32_Service 类具有这些属性。

AcceptPause

数据类型: 布尔值

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |SERVICE_STATUS|dwControlsAccepted|SERVICE_ACCEPT_PAUSE_CONTINUE“) , DisplayName (”Service 接受暂停“)

指示是否可以暂停服务。

此属性继承自 Win32_BaseService

AcceptStop

数据类型: 布尔值

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |SERVICE_STATUS|dwControlsAccepted|SERVICE_ACCEPT_STOP“) , DisplayName (”Service 接受停止“)

指示是否可以停止服务。

此属性继承自 Win32_BaseService

Caption

数据类型: string

访问类型:只读

限定符: MaxLen (64) 、 DisplayName (“Caption”)

服务的简短说明 - 单行字符串。

此属性继承自 CIM_ManagedSystemElement

检查站

数据类型: uint32

访问类型:只读

限定符:MappingStrings (“Win32API|服务结构 |SERVICE_STATUS|dwCheckPoint“) , DisplayName (”Check Point Count“)

服务定期递增以在长时间启动、停止、暂停或继续操作期间报告其进度的值。 例如,服务在启动时完成其初始化的每个步骤时递增此值。 在服务上调用 操作的用户界面程序在长时间操作期间使用此值跟踪服务的进度。 此值无效,当服务没有挂起的启动、停止、暂停或继续操作时,此值应为零。

CreationClassName

数据类型: string

访问类型:只读

限定符: CIM_KeyDisplayName (“Class Name”)

在创建实例时使用的继承链中显示的第一个具体类的名称。 与 类的其他键属性一起使用时,此属性允许对此类的所有实例及其子类进行唯一标识。

此属性继承自 CIM_Service

DelayedAutoStart

数据类型: 布尔值

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |SERVICE_DELAYED_AUTO_START_INFO|fDelayedAutostart“) , DisplayName (”Delayed Auto-Start“)

如果 为 True,则服务在其他自动启动服务启动后启动,并出现短暂延迟。

Windows Server 2012 R2、Windows 8.1、Windows Server 2012、Windows 8、Windows Server 2008 R2、Windows 7、Windows Server 2008 和 Windows Vista:在Windows Server 2016和Windows 10.

描述

数据类型: string

访问类型:只读

限定符: DisplayName (“Description”)

对象的说明。

此属性继承自 CIM_ManagedSystemElement

DesktopInteract

数据类型: 布尔值

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |QUERY_SERVICE_CONFIG|dwServiceType|SERVICE_INTERACTIVE_PROCESS“) , DisplayName (”与桌面交互“)

指示服务是否可以在桌面上创建窗口或与 Windows 通信,从而以某种方式与用户交互。 交互式服务必须在本地系统帐户下运行。 大多数服务不是交互式的;也就是说,它们不会以任何方式与用户通信。

此属性继承自 Win32_BaseService

DisplayName

数据类型: string

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |QUERY_SERVICE_CONFIG|lpDisplayName“) , DisplayName (”显示名称“)

在“服务”管理单元中查看的服务的名称。 此字符串的最大长度为 256 个字符。 请注意,存储在注册表) 中的显示名称和服务名称 (并不总是相同的。 例如,DHCP 客户端服务的服务名称为 Dhcp,但显示名称为 DHCP 客户端。 名称在服务控制管理器中保留大小写。 但是, DisplayName 比较始终不区分大小写。

约束:接受与 Name 属性相同的值。

示例:“Atdisk”

此属性继承自 Win32_BaseService

ErrorControl

数据类型: string

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |QUERY_SERVICE_CONFIG|dwErrorControl“) , DisplayName (”启动失败的严重性“)

如果此服务在启动期间无法启动,则错误的严重性。 值指示启动程序在发生故障时采取的操作。 所有的错误都由计算机系统记录。

忽略 (“Ignore”)

不通知用户。

Normal (“Normal”)

通知用户。 通常,这是一个消息框显示,通知用户有问题。

严重 (“严重”)

使用上一次已知正确的配置重新启动系统。

关键 (“严重”)

系统将尝试使用正确的配置重新启动。 如果服务第二次无法启动,则启动将失败。

未知 (“未知”)

错误的严重性未知。

此属性继承自 Win32_BaseService

ExitCode

数据类型: uint32

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |SERVICE_STATUS|dwWin32ExitCode“) , DisplayName (”Exit Code“)

定义在启动或停止服务时遇到的错误的 Windows 错误代码。 如果错误是此类表示的服务所特有的,并且 ServiceSpecificExitCode 属性中包含该错误的相关信息,则此属性将设置为 ERROR_SERVICE_SPECIFIC_ERROR (1066)。 服务在运行时将此值设置为 NO_ERROR ,并在正常终止时再次设置此值。

此属性继承自 Win32_BaseService

InstallDate

数据类型: datetime

访问类型:只读

限定符: MappingStrings (“MIF”。DMTF |ComponentID|001.5“) , DisplayName (”安装日期“)

安装日期对象。 此属性不需要值来指示对象已安装。

此属性继承自 CIM_ManagedSystemElement

名称

数据类型: string

访问类型:只读

限定符:

服务的唯一标识符,用于指示所管理的功能。 对象的 Description 属性中介绍了此功能。

此属性继承自 CIM_ManagedSystemElement

PathName

数据类型: string

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |QUERY_SERVICE_CONFIG|lpBinaryPathName“) , DisplayName (”File Path Name“)

实现服务的服务二进制文件的完全限定路径。

示例:“\SystemRoot\System32\drivers\afd.sys”

此属性继承自 Win32_BaseService

ProcessId

数据类型: uint32

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |SERVICE_STATUS_PROCESS|dwProcessId“) , DisplayName (”Process Id“)

服务的进程标识符。

示例:324

ServiceSpecificExitCode

数据类型: uint32

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |SERVICE_STATUS|dwServiceSpecificExitCode“) , DisplayName (”服务器特定的退出代码“)

服务启动或停止时发生的错误的特定于服务的错误代码。 退出代码由此类表示的服务定义。 仅当 ExitCode 属性值 为 ERROR_SERVICE_SPECIFIC_ERROR ( 1066) 时,才会设置此值。

此属性继承自 Win32_BaseService

ServiceType

数据类型: string

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |QUERY_SERVICE_CONFIG|dwServiceType“) , DisplayName (”Service Type“)

用于调用进程的服务的类型。

有效值为:

内核驱动程序 (“内核驱动程序”)

文件系统驱动程序 (“文件系统驱动程序”)

适配器 (“Adapter”)

识别器驱动程序 (“识别器驱动程序”)

自己的进程 (“自己的进程”)

共享进程 (“共享进程”)

Interactive Process (“Interactive Process”)

此属性继承自 Win32_BaseService

已开始

数据类型: 布尔值

访问类型:只读

限定符: DisplayName (“Started”)

指示服务是否已启动。

此属性继承自 CIM_Service

StartMode

数据类型: string

访问类型:只读

限定符: DisplayName (“Start Mode”)

Windows 基本服务的启动模式。

启动 (“启动”)

操作系统加载程序启动的设备驱动程序 (仅对驱动程序服务) 有效。

系统 (“系统”)

由操作系统初始化过程启动的设备驱动程序。 此值只对驱动程序服务有效。

自动 (“自动”)

服务将在系统启动期间由服务控制管理器自动启动。 即使用户未登录,也会启动自动服务。

手动 (“手动”)

当进程调用 StartService 方法时,服务控制管理器要启动的服务。 除非用户登录并启动这些服务,否则这些服务不会启动。

禁用 (“Disabled”)

在 StartMode 更改为“自动”或“手动”之前无法启动的服务。

此属性继承自 CIM_Service

StartName

数据类型: 字符串

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |QUERY_SERVICE_CONFIG|lpServiceStartName“) , DisplayName (”起始帐户名称“)

运行服务的帐户名称。 根据服务类型,帐户名称可能采用“DomainName\Username”或 UPN 格式 (“Username@DomainName”) 。 服务进程在运行时使用这两种形式之一进行记录。 如果帐户属于内置域,则可以指定“.\Username”。 对于内核或系统级驱动程序, StartName 包含驱动程序对象名称 (,即 I/O 系统用于加载设备驱动程序的“\FileSystem\Rdr”或“\Driver\Xns”) 。 此外,如果指定 NULL ,驱动程序使用 I/O 系统基于服务名称创建的默认对象名称运行。

示例:“DWDOM\管理员”

此属性继承自 Win32_BaseService

State

数据类型: 字符串

访问类型:读/写

限定符: MappingStrings (“Win32API|服务结构 |SERVICE_STATUS|dwCurrentState “) , DisplayName (”State“)

基本服务的当前状态。

有效值为:

已停止 (“已停止”)

开始挂起 (“开始挂起”)

停止挂起 (“停止挂起”)

运行 (“正在运行”)

继续挂起 (“继续挂起”)

暂停挂起 (“暂停挂起”)

已暂停 (“暂停”)

未知 (“未知”)

Windows Server 2008 和 Windows Vista: 此属性在 Windows 7 和 Windows Server 2008 R2 之前是只读的。

此属性继承自 Win32_BaseService

Status

数据类型: 字符串

访问类型:只读

限定符: MaxLen (10) 、 DisplayName (“Status”)

对象的当前状态。 可以定义各种操作和非操作状态。 操作状态包括:“正常”、“降级”和“预失败”, (元素(例如已启用 SMART 的硬盘驱动器)可能正常运行,但预测近期) 故障。 非操作状态包括:“错误”、“正在启动”、“正在停止”和“服务”。 后者“服务”可以在磁盘镜像重新同步、重新加载用户权限列表或其他管理工作期间应用。 并非所有此类工作都处于联机状态,但托管元素既不是“正常”,也不是处于其他状态之一。

此属性继承自 CIM_ManagedSystemElement

有效值为:

OK (“OK”)

错误 (“错误”)

降级 (“已降级”)

未知 (“未知”)

Pred Fail (“Pred Fail”)

starting (“Starting”)

停止 (“停止”)

服务 (“服务”)

压力 (“有压力”)

NonRecover (“NonRecover”)

无联系人 (“无联系人”)

Lost Comm (“Lost Comm”)

SystemCreationClassName

数据类型: 字符串

访问类型:只读

限定符: 传播 (“CIM_SystemCreationClassName“) 、 CIM_KeyDisplayName (”系统类名称“)

键入承载此服务的系统的名称。

此属性继承自 CIM_Service

SystemName

数据类型: 字符串

访问类型:只读

限定符: 传播 (“CIM_SystemName“) , CIM_KeyDisplayName (”系统名称“)

承载此服务的系统的名称。

此属性继承自 CIM_Service

TagId

数据类型: uint32

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |QUERY_SERVICE_CONFIG|dwTagId“) , DisplayName (”Tag Id“)

组中此服务的唯一标记值。 值为 0 (零) 表示服务没有标记。 标记可用于对加载顺序组中的服务启动进行排序,方法是在位于以下位置的注册表中指定标记顺序向量:

\ HKEY_LOCAL_MACHINE系统\CurrentControlSet\控制\    GroupOrderList

仅针对具有启动模式或系统启动模式的内核驱动程序和文件系统驱动程序启动类型服务评估标记。

此属性继承自 Win32_BaseService

WaitHint

数据类型: uint32

访问类型:只读

限定符: MappingStrings (“Win32API|服务结构 |SERVICE_STATUS|dwWaitHint“) , DisplayName (”估计等待时间“)

挂起的开始、停止、暂停或继续操作所需的估计时间(以毫秒为单位)。 指定时间过后,服务使用递增的 CheckPoint 值或 CurrentState 中的更改对 SetServiceStatus 方法进行下一次调用。 如果 WaitHint 指定的时间经过,并且 CheckPoint 未递增,或者 CurrentState 未更改,则服务控制管理器或服务控制程序假定发生了错误。

备注

Win32_Service 类派生自 Win32_BaseService

管理特定计算机的方式在很大程度上取决于计算机所扮演的角色。 例如,通常监视 DNS 服务器与 DHCP 服务器不同的方面。 尽管没有单个属性可以告诉你特定计算机是数据库服务器、电子邮件服务器还是多媒体服务器,但通常可以通过标识计算机上安装的服务来标识计算机所扮演的角色。

在大型组织中,一台计算机上可能只安装电子邮件) 等主要服务 (之一。 邮件服务器也作为 Microsoft® Windows Media® 技术播放器文件服务器执行操作是不寻常的。 因此,标识计算机上安装的服务有助于识别计算机在网络中的角色。 如果 Microsoft® Exchange Server服务已安装并在计算机上运行,则通常可以安全地假定此计算机充当邮件服务器。

可以使用 WMI Win32_Service 类枚举计算机上安装的服务。 此外,可以使用此类来确定这些服务当前是否正在运行,并返回有关该服务及其配置方式的任何其他必需信息。

服务应用程序符合服务控制管理器 (SCM) 的接口规则,用户可以在系统启动时通过服务控制面板实用工具或使用 Windows API 中包含的服务功能的应用程序自动启动。 当没有用户登录到计算机时,服务可以启动。

从远程计算机进行连接的用户必须启用 SC_MANAGER_CONNECT 特权才能枚举此类。 有关详细信息,请参阅 服务安全性和访问权限

示例

在 TechNet 库 上返回一组设备 PowerShell 上的服务“状态”的 PS- WMI 查询 示例使用 Win32_Service 从 Active Directory 创建设备列表,然后查询每个使用 ping 响应的设备,以查找正在运行的特定服务。

TechNet 库中的服务器报表 PowerShell 示例使用 Win32_Service 收集服务器信息并在 Word 文档中发布。

以下 VBScript 代码示例显示当前安装的所有服务。

for each Service in _ 
    GetObject("winmgmts:").InstancesOf ("Win32_Service")
 WScript.Echo ""
 WScript.Echo Service.Name

 description = Service.Description 
 if IsNull(description) then description = "<No description>"

 pathName = Service.PathName
 if IsNull(pathName) then pathName = "<No path>"

 startName = Service.StartName
 if IsNull(startName) then startName = "<None>"

 WScript.Echo "  Description:  ", description
 WScript.Echo "  Executable:   ", pathName
 WScript.Echo "  Status:       ", Service.Status
 WScript.Echo "  State:        ", Service.State
 WScript.Echo "  Start Mode:   ", Service.StartMode
 Wscript.Echo "  Start Name:   ", startName
next

以下 VBScript 代码示例介绍指定计算机上已暂停、正在运行和已停止的服务。

On Error Resume Next
 StateString = "Paused,Running,Stopped"
 StateArray = Split(StateString, ",", -1, 1) 
 ComputerName = InputBox("Enter the computer name", "List Service", "localhost")

 For x = 0 to Ubound (StateArray)
 Set Services = GetObject("winmgmts:\\" & ComputerName & "\Root\CIMv2").ExecQuery("SELECT * FROM Win32_Service where State='" & StateArray(x) & "'")
 
 For Each Service in Services
  SList = SList & Service.Name & VBlf 
 Next

 WScript.Echo StateArray(x) & " Services: " & VBlf & SList
 SList = ""

Next

以下 Perl 脚本演示如何从 Win32_Service 实例检索正在运行的服务的列表。

use strict;
use Win32::OLE;

my ( $ServiceSet, $Service );

eval { $ServiceSet = Win32::OLE->GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\Root\\CIMv2")->
 ExecQuery("SELECT * FROM Win32_Service WHERE State=\"Running\""); };
unless ($@)
{
 print "\n";
 foreach $Service (in $ServiceSet) 
 {
  print $Service->{Name}, "\n";
  if( $Service->{Description} ) 
   {
    print "  $Service->{Description}\n";
   }
  else
   {
    print "  <No description>\n";
   }
  print "  Process ID: ", $Service->{ProcessId}, "\n";
  print "  Start Mode: ", $Service->{StartMode}, "\n";
  print "\n";
 }
}
else
{
 print STDERR Win32::OLE->LastError, "\n";
}

以下 c# 示例使用 Microsoft.Management.Infrastructure 检索本地计算机上所有正在运行的服务。

static void QueryInstanceFunc()
        {
 
            CimSession session = CimSession.Create("localHost");
            IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_Service");

            foreach (CimInstance cimObj in queryInstance)
            {
                Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString());
                Console.WriteLine(cimObj.CimInstanceProperties["State"].ToString());
                Console.WriteLine(cimObj.CimInstanceProperties["Status"].ToString());
                
                //Console.WriteLine(cimObj.CimInstanceProperties["NetworkAddress"].ToString());
                Console.WriteLine();

            }

            Console.ReadLine();
        }
    

以下 C# 代码示例使用 System.Management 命名空间检索本地计算机上所有正在运行的服务。

注意

System.Management 包含用于访问 WMI 的原始类;但是,它们被视为速度较慢,并且通常无法缩放,以及其 Microsoft.Management.Infrastructure 对应项。

 

using System.Management;
...
        static void oldSchoolQueryInstanceFunc()
        {

            ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Service");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);


            ManagementObjectCollection queryCollection = searcher.Get();
            foreach (ManagementObject m in queryCollection)
            {
                Console.WriteLine("ServiceName : {0}", m["Name"]);
                Console.WriteLine("State : {0}", m["State"]);
                Console.WriteLine("Status : {0}", m["Status"]);
                Console.WriteLine();
            }

            Console.ReadLine();


        }

要求

要求
最低受支持的客户端
Windows Vista
最低受支持的服务器
Windows Server 2008
命名空间
Root\CIMV2
MOF
CIMWin32.mof
DLL
CIMWin32.dll

另请参阅

Win32_BaseService

操作系统类

WMI 任务:服务