标题：sc命令
SC命令功能
SC命令的功能有
1、SC可以 检索和设置有关服务的控制信息。可以使用 SC.exe 来测试和调试服务程序。
2、可以设置存储在注册表中的服务属性，以控制如何在启动时启动服务应用程序，以及如何将其作为后台程序运行。即更改服务的启动状态。
3、SC 命令还可以用来删除系统中的无用的服务。（除非对自己电脑中的软硬件所需的服务比较清楚，否则不建议删除任何系统服务，尤其是基础服务）
4、SC命令 的参数可以配置指定的服务，检索当前服务的状态，也可以停止和启动服务（功能上类似NET STOP/START命令，但SC速度更快且能停止更多的服务）。
5、可以创建批处理文件来调用不同的 SC 命令，以自动启动或关闭服务序列。
SC.exe 提供的功能类似于“控制面板”中“管理工具”项中的“服务”。
SC命令列表及格式
SC命令不能单独使用,必须和其它的命令结合起来一起使用。一共有24个，如下所示
sc boot　sc config　sc continue　sc control　sc create　sc delete　sc descrīption　sc enumdepend
sc failure　sc getdisplayname　sc getkeyname　sc interrogate　sc lock　sc pause　sc qc
sc qdescrīption　sc qfailure　sc query　sc queryex　sc querylock　sc sdset sc sdshow
sc　start　sc stop
在命令行中直接输入SC会显示SC命令的帮助信息，直接输入以上24个命令除sc query 和 sc queryex之外都将显示该SC命令的帮助信息。（输入sc query和sc queryex会显示当前系统中正在运行的所有服务的详细信息，但sc queryex比sc query显示的信息多出来两项:PID和FLAGS）
SC命令的格式：SC [Servername] command Servicename [Optionname= Optionvalues]
Servername：指定服务所在的远程服务器的名称。名称必须采用通用命名约定 (UNC) 格式（“\\myserver”）。要在本地运行SC.exe，请忽略此参数。
command ：即以上提到的那24个命令（SC后面的那个，如query,start,stop,create,config等）
Servicename：服务名，也就是要配置的那个服务的名字，例如你要启动一个服务你就输入sc start +你要启动的服务名。（注意这里的服务名不是服务的显示名称，而是服务名称，这个服务名称可以在系统管理工具下的服务中可以看到，例如在服务中双击DHCP Client可以看到其服务名称是Dhcp，而那个DHCP Client是显示名称，可以用sc命令来更改一个服务的显示名称）
Optionname= Optionvalues：是选项名和选项的值。
例如你要在开机是系统自动加载themes服务，你可以使用sc config themes start= auto，后面的start就是选项，auto是选项的值。（注意=号后面有个空格，所有的使用选项的在=号后面都要加个空格再加上选项值）
SC命令的用法
下面给出每个命令详细的用法
1、sc boot
表明最近的启动是否应该保存为上次已知的正确配置。
语法
Sc [ServerName] boot [{bad | OK}]
参数
ServerName：上面已经介绍，在此不在累述（下同）
[{bad | OK}] 
指定最近的启动是否错误或它是否应该保存为上次已知的正确启动配置。
下面的示例显示了如何使用 sc boot 命令：
sc boot ok 
sc boot bad
2、sc config
修改注册表和“服务控制管理器”数据库中服务项目的值。
语法
Sc [ServerName] config [ServiceName] [type= {own | share | kernel | filesys | rec | adapt | interacttype= {own | share}}] [start= {boot | system | auto | demand | disabled}] [error= {normal | severe | critical | ignore}] [binpath= BinaryPathName] [group= LoadOrderGroup] [tag= {yes | no}] [depend= dependencies] [obj= {AccountName | ObjectName}] [displayname= DisplayName] [password= Password]
ServiceName
指定要操作的服务名。（上面也已经介绍，下文不在累述）
type= {own | share | kernel | filesys | rec | adapt | interacttype= {own | share}} 
指定服务类型。
own
服务以其自身的进程运行。不与其他服务共享可执行文件。这是默认值。
share
服务作为共享进程运行。与其他服务共享可执行文件。
kernel
驱动程序。
filesys
文件系统驱动程序。
rec
文件系统识别驱动程序（标识计算机上使用的文件系统）。
adapt
适配器驱动程序（标识键盘、鼠标、磁盘驱动器这样的硬件项）。
interact
服务可以与桌面交互，接收用户的输入。交互服务必须在 LocalSystem 帐户下运行。该类型必须与 type= own 或 type= share（例如，type= interact type= own）结合使用。自身使用 type= interact 将会产生参数无效的错误。
start= {boot | system | auto | demand | disabled} 
指定服务的启动类型。 
boot
由启动加载程序加载的设备驱动程序。
system
在核心初始化过程中启动的设备驱动程序。
auto
每次计算机重新启动时都会自动启动、并且即使无人登录到计算机也能正常运行的服务。
demand
必须手动启动的服务。如果没有指定 start=，则此项即为默认值。
disabled
不能启动的服务。要启动禁用的服务，应将启动类型更改为其他值。
error= {normal | severe | critical | ignore} 
如果在启动过程中，服务启动失败，则指定错误的严重性。
normal
将记录错误，并且显示消息对话框，通知用户服务启动失败。启动将继续。这是默认设置。
severe
记录错误（如果存在）。计算机尝试以最新的有效配置重新启动。这可能导致计算机能够重新启动，但服务却仍然无法运行。
critical
记录错误（如果存在）。计算机尝试以最新的有效配置重新启动。如果上次已知正确的配置失败，启动也将失败，启动进程将以停止错误而中止。
ignore
错误已记录，启动继续。记录错误超出在事件ri志的范围，不再给用户作出提示。 
binpath= BinaryPathName
指定指向服务二进制文件的路径。 
group= LoadOrderGroup
指定该服务所属组的名称。组列表存储在注册表的 HKLM\System\CurrentControlSet\Control\ServiceGroupOrder 子项中。默认设置为空值。
tag= {yes | no} 
指定是否在 CreateService 调用中获得 TagID。标记仅用于引导启动或系统启动驱动程序。
depend= dependencies
指定必须在此项服务之前启动的服务或组的名称。名称以正斜杠 (/) 分隔。
obj= {AccountName | ObjectName} 
指定运行服务将使用的帐户名，或指定运行驱动程序将使用的 Windows 驱动程序对象名。默认设置为 LocalSystem。
displayname= DisplayName
指定一个可以在用户界面程序中用于为用户标识服务的友好的、有意义的名称。例如，一项服务的子项名是对用户毫无意义的 wuauserv，而显示的名称是“自动更新”。
password= Password
指定一个密码。如果使用了非 LocalSystem 的帐户，则此项是必需的。
备注
如果参数及其值之间没有空格，（例如，是 type= own，而不是 type=own），则操作会失败。
示例
下面的示例显示了如何使用 sc config 命令：
sc config NewService binpath= "ntsd -d c:\windows\system32\NewServ.exe"
3、sc continue
为了恢复暂停的服务，要给服务发送一个 CONTINUE 控制请求。
语法
Sc [ServerName] continue [ServiceName]
参数
ServerName：略
ServiceName：略
备注
使用 continue 操作来恢复暂停的服务。 
下面的示例显示了如何使用 sc continue 命令：
sc continue tapisrv
4、sc control
向服务发送 CONTROL 。
语法
sc [ServerName] control [ServiceName] [{paramchange | netbindadd | netbindremove | netbindenable | netbinddisable | UserDefinedControlB}]
参数
{paramchange | netbindadd | netbindremove | netbindenable | netbinddisable | UserDefinedControlB} 
指定要发送到服务的控制。
5、sc create
在注册表和“服务控制管理器”中为服务创建子项和项目。
语法
Sc [ServerName] create [ServiceName] [type= {own | share | kernel | filesys | rec | adapt | interacttype= {own | share}}] [start= {boot | system | auto | demand | disabled}] [error= {normal | severe | critical | ignore}] [binpath= BinaryPathName] [group= LoadOrderGroup] [tag= {yes | no}] [depend= dependencies] [obj= {AccountName | ObjectName}] [displayname= DisplayName] [password= Password]
参数：各个参数的作用参见sc config 命令
下面的示例显示了如何使用 sc create 命令：
sc \\myserver create NewService binpath= c:\windows\system32\NewServ.exe
sc create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto depend= "+TDI Netbios"
6、sc delete
从注册表中删除服务子项。如果服务正在运行或者另一个进程有一个该服务的打开句柄，那么此服务将标记为删除。
语法
Sc [ServerName] delete [ServiceName]
参数：略
备注
使用“添加或删除程序”删除 DHCP、DNS 或任何其他内置的操作系统服务。“添加或删除程序”不仅会删除该服务的注册表子项，而且还会卸载该服务并删除其所有的快捷方式。 
下面的示例显示了如何使用 sc delete 命令：
sc delete newserv
7、sc descrīption
设置服务的描述字符串。
语法
Sc [ServerName] descrīption [ServiceName] [Descrīption]
参数：略
描述
为指定服务指定描述。这个描述的内容可以在控制面板－管理工具－服务里通过查看该服务的属性看到。如果没有指定字符串，则不会修改该服务的描述。不限制服务描述中可包含的字符数。
示例
下面的示例显示了如何使用 sc descrīption 命令：
sc descrīption newserv "Runs quality of service control."
8、sc enumdepend
枚举依赖此服务的系统组件，这也可以从控制面板－管理工具－服务里通过查看该服务的属性中的依存关系选项卡看到（“下面的系统组件依赖此服务”下面的部分）
语法
Sc [ServerName] enumdepend [ServiceName] [BufferSize]
参数
BufferSize
以字节为单位指定枚举缓冲区的大小。默认值为 1024 字节。
备注
如果缓冲区不够大，enumdepend 操作只会部分输出依存关系，并指定输出所有依存关系所需的额外缓冲区大小。如果输出被截断，请重新运行该操作并指定更大的缓冲区大小。
下面的示例显示了如何使用 sc enumdepend 命令：
sc enumdepend rpcss 5690
sc enumdepend tapisrv
9、sc failure
指定服务失败时要采取的措施。
语法
Sc [ServerName] failure [ServiceName] [reset= ErrorFreePeriod] [reboot= BroadcastMessage] [command= CommandLine] [actions= FailureActionsAndDelayTime]
参数
reset= ErrorFreePeriod
指定没有失败的周期长度（单位为秒），此后失败计数应该重置为 0。这个参数必须与 actions= 参数结合使用。
reboot= BroadcastMessage
指定服务失败时要广播的消息。
command= CommandLine
指定服务失败时要运行的命令行。有关在失败时如何运行批处理或 VBS 文件的详细信息，请参阅“注释”。
actions= FailureActionsAndDelayTime
指定失败操作及其延迟时间（单位为毫秒），以正斜杠 (/) 隔开。以下操作均有效：run、restart 和 reboot。此参数必须与 reset= 参数结合使用。失败后不采取任何操作时，请使用 actions= ""。
备注
并非所有服务都允许更改其失败选项。其中一些作为服务集的一部分运行。
要在失败时运行批处理文件，请指定 cmd.exeDrive:\FileName.bat 为 command= 参数，其中 Drive:\FileName.bat 是批处理文件的完全合格的名称。
要在失败时运行 VBS 文件，请指定 cscrīpt drive:\myscrīpt.vbs 为 command= 参数，其中 Drive:\myscrīpt.vbs 是脚本文件完全合格的名称。
可以将三种不同的操作指定为 actions= 参数，它们将会在服务的第一次、第二次、第三次失败时使用。
如果参数及其值之间没有空格，（例如，是 type= own，而不是 type=own），则操作会失败。
下面的示例显示了如何使用 sc failure 命令：
sc failure msftpsvc reset= 30 actions= restart/5000
sc failure dfs reset= 60 command= c:\windows\services\restart_dfs.exe actions= run/5000
sc failure dfs reset= 60 actions= reboot/30000
sc failure dfs reset= 60 reboot= "The Distributed File System service has failed.Because of this, the computer will reboot in 30 seconds." actions= reboot/30000
sc failure myservice reset= 3600 reboot= "MyService crashed -- rebooting machine" command= "%windir%\MyServiceRecovery.exe" actions= restart/5000/run/10000/reboot/60000
10、sc getdisplayname
获得与特定服务关联的显示名称。
语法
Sc [ServerName] getdisplayname [ServiceName] [BufferSize]
参数
BufferSize
指定缓冲区大小（以字节为单位）。默认值为 1024 字节。
下面的示例显示了如何使用 sc getdisplayname 命令：
sc getdisplayname clipsrv
sc getdisplayname tapisrv
sc getdisplayname sharedaccess
11、sc getkeyname
使用特定服务的显示名称作为输入的内容会获得与其相关联的项名。
语法
sc [ServerName] getkeyname [ServiceDisplayName] [BufferSize]
参数
ServiceDisplayName
指定服务的显示名称。
BufferSize
指定缓冲区大小（以字节为单位）。默认值为 1024 字节。
备注
如果 ServiceDisplayName 包含空格，请使用引号将文本引起来（例如，"Service Display Name"）。
下面的示例显示了如何使用 sc getkeyname 命令：
sc getkeyname "remote procedure call (rpc)"
sc getkeyname "internet connection sharing"
sc getkeyname clipbook
12、sc interrogate
向服务发送一个 INTERROGATE 控制请求。
语法
Sc [ServerName] interrogate [ServiceName]
参数：略
备注
向服务发送 INTERROGATE 会导致该服务使用“服务控制管理器”更新其状态。
下面的示例显示了如何使用 sc interrogate 命令：
sc interrogate sharedaccess
sc interrogate rpcss
13、sc lock
锁定“服务控制管理器”的数据库。
语法
sc [ServerName] lock
参数：略
备注
锁定“服务控制管理器”的数据库会阻止启动任何服务。如果要确保服务在停止之后不会启动，请使用这个命令。这可以使您不受干扰地进行一些操作（例如，删除服务）。
使用 lock 操作锁定“服务控制管理器”的数据库，然后通过键入 u 来使数据库解锁。也可停止锁定数据库的进程。
下面的示例显示了如何使用 sc lock 命令：
sc lock
14、sc pause
向服务发送 PAUSE 控制请求。
语法
Sc [ServerName] pause [ServiceName]
参数：略
备注
在终止服务之前使用 pause 操作来暂停它。
并非所有服务都能够被暂停。
在暂停时并非所有服务都执行同样的操作。一些服务继续为现有客户端服务，但拒绝接受新的客户端。其他的会终止对现有客户端的服务，同时也会拒绝接受新的客户端。
下面的示例显示了如何使用 sc pause 命令：
sc pause tapisrv
15、sc qc
查询服务的配置信息。
语法
Sc [ServerName] qc [ServiceName] [BufferSize]
参数
BufferSize
指定缓冲区大小（以字节为单位）。默认值为 1024 字节。
备注
qc 操作可以显示有关服务的下列信息：
SERVICE_NAME（服务的注册表子项名称）、TYPE、ERROR_CONTROL、BINARY_PATH_NAME、LOAD_ORDER_GROUP、TAG、DISPLAY_NAME、DEPENDENCIES 和 SERVICE_START_NAME。
管理员可以使用 SC 来确定任一服务的二进制名称，并查明它是否与其他服务共享一个进程，在命令行下键入下列命令：
sc qc ServiceName
SC 有助于将 Microsoft 管理控制台 (MMC) 的服务节点中的服务与“系统监视器”中的进程进行匹配。如果二进制名称是 Services.exe，那么服务共享“服务控制器”进程。
Services.exe 启动所有的服务。为节约系统资源，几个为 Windows 开发的 Win32 服务被编写为共享 Services.exe 进程。这些服务不作为独立的进程列在“系统监视器”或“任务管理器”之中。Svchost.exe 也是如此，它是许多操作服务共享的服务主机进程。
因为第三方 Win32 服务也可以配置为共享进程，所以不可能为每一个 Win32 服务创建一个进程。SC 可以用来获得这些服务的配置信息。但是，如果一项服务不与其他服务共享其进程，那么在服务运行时，“系统监视器”中会出现其进程。
因为 SC 与包含在 Windows 中的 Services.exe 相比，提供了有关服务的更为详细和准确的信息，所以对于服务开发人员来说，SC 更有用处。Services.exe 可以确定服务是正在运行、已停止还是已暂停。尽管这些工具对于正在平稳运行的已调试应用程序已经足够，但它们提供的有关正开发的服务的信息却会使人误解。例如，正在启动的服务不管其实际运行与否都显示为已启动。
SC 可执行对所有 Windows 服务控制应用编程接口 (API) 函数的调用。通过在命令行下指定这些函数来设置其参数。
使用 SC，可以查询服务状态，检索存储在状态结构字段中的值。Services.exe 不能提供服务的完整状态，但 SC 可以显示精确的服务状态，以及最新的检查点号码和等待提示。可以将检查点用作调试工具，原因在于它表明了在程序停止响应之前初始化进行的程度。SC 也可以用来指定远程计算机名，以便于在远程计算机上调用服务 API 函数或查看服务状态结构。
下面的示例显示了如何使用 sc qc 命令：
sc qc \\myserver newsrvice
sc qc rpcss 248
16、sc qdescrīption
显示服务的描述字符串。
语法
Sc [ServerName] qdescrīption [ServiceName] [BufferSize]
参数
BufferSize
指定缓冲区大小（以字节为单位）。默认值为 1024 字节。
下面的示例显示了如何使用 sc qdescrīption 命令：
sc qdescrīption rpcss
sc qdescrīption rpcss 138
17、sc qfailure
显示指定服务失败时要执行的操作。
语法
Sc [ServerName] qfailure [ServiceName] [BufferSize]
参数
BufferSize
指定缓冲区大小（以字节为单位）。默认值为 1024 字节。
备注
qfailure 操作可以显示有关服务的下列信息：SERVICE_NAME（服务的注册表子项名）、RESET_PERIOD、REBOOT_MESSAGE、COMMAND_LINE 和 FAILURE_ACTIONS。
下面的示例显示了如何使用 sc qfailure 命令：
sc qfailure rpcss
sc qfailure rpcss 20
18、sc query
获得和显示关于指定的服务、驱动程序、服务类型或驱动程序类型的信息。
语法
Sc [ServerName] query [ServiceName] [type= {driver | service | all}] [type= {own | share | interact | kernel | filesys | rec | adapt}] [state= {active | inactive | all}] [bufsize= BufferSize] [ri= ResumeIndex] [group= GroupName]
参数
ServiceName
指定由 getkeyname 操作返回的服务名。此 query 参数不与其他的 query 参数结合使用（除了 ServerName）。
type= {driver | service | all} 
指定需要枚举的内容。默认类型为 service。
driver
指定仅枚举驱动程序。
service
指定仅枚举服务。
all
指定同时枚举驱动程序和服务。
type= {own | share | interact | kernel | filesys | rec | adapt} 
指定要枚举的服务类型或驱动程序类型。
own
服务以其自身的进程运行。不与其他服务共享可执行文件。这是默认值。
share
服务作为共享进程运行。与其他服务共享可执行文件。
interact
服务可以与桌面交互，接收用户的输入。交互服务必须在 LocalSystem 帐户下运行。
kernel
驱动程序。
filesys
文件系统驱动程序。
state= {active | inactive | all} 
指定要枚举的服务的已开始状态。默认状态是 active。
active
指定所有的活动服务。
inactive
指定所有暂停或停止的服务。
all
指定所有服务。
bufsize= BufferSize
以字节为单位指定枚举缓冲区的大小。默认大小为 1024 字节。当从查询返回的显示结果超过 1024 个字节时，增加枚举缓冲区的大小。
ri= ResumeIndex
指定开始或继续枚举的索引号。默认值为 0。 在查询返回的信息超过默认缓冲区能够显示的大小时，请与 bufsize= 参数结合使用这个参数。
group= GroupName
指定要枚举的服务组。默认设置为所有组。
备注
如果参数及其值之间没有空格，（例如，是 type= own，而不是 type=own），则操作会失败。
query 操作可以显示有关服务的下列信息：SERVICE_NAME（服务的注册表子项名）、TYPE、STATE（以及不可用的状态）、WIN32_EXIT_B、SERVICE_EXIT_B、CHECKPOINT 和 WAIT_HINT。
在某些情况下，type= 参数可以使用两次。type= 参数的第一次出现指定是否查询服务、驱动器或所有这些项。type= 参数的第二次出现指定一个由 create 操作进一步缩小查询范围的类型。
当 query 命令的显示结果超过了枚举缓冲区的大小时，显示类似于以下内容的消息： 
Enum: more data, need 1822 bytes start resume at index 79
要显示剩余的 query 信息，请重新运行 query，将 bufsize= 设置为所需的字节数，并将 ri= 设置为指定的索引。例如，在命令行键入下面的指令会显示剩余的输出：
sc query bufsize= 1822 ri= 79
下面的示例显示了如何使用 sc query 命令：
sc query
sc query messenger
sc query type= driver
sc query type= service
sc query state= all
sc query bufsize= 50
sc query ri= 14
sc query type= service type= interact
sc query type= driver group= ndis
19、sc queryex
获得和显示关于指定的服务、驱动程序、服务类型或驱动程序类型的扩展信息。
语法
Sc [ServerName] queryex [type= {driver | service | all}] [type= {own | share | interact | kernel | filesys | rec | adapt}] [state= {active | inactive | all}] [bufsize= BufferSize] [ri= ResumeIndex][group= GroupName]
参数
ServiceName
指定由 getkeyname 操作返回的服务名。此 queryex 参数不与 ServerName 之外的任何其他 queryex 参数结合使用。
type= {driver | service | all} 
指定需要枚举的内容。默认类型为 service。
driver
指定仅枚举驱动程序。
service
指定仅枚举服务。
all
指定同时枚举驱动程序和服务。
type= {own | share | interact | kernel | filesys | rec | adapt} 
指定要枚举的服务类型或驱动程序类型。
own
服务以其自身的进程运行。不与其他服务共享可执行文件。这是默认值。
share
服务作为共享进程运行。与其他服务共享可执行文件。
interact
服务可以与桌面交互，接收用户的输入。交互服务必须在 LocalSystem 帐户下运行。
kernel
驱动程序。
filesys
文件系统驱动程序。
state= {active | inactive | all} 
指定要枚举的服务的已开始状态。默认状态是 active。 
active
指定所有的活动服务。
inactive
指定所有暂停或停止的服务。
all
指定所有服务。
bufsize= BufferSize
以字节为单位指定枚举缓冲区的大小。默认大小为 1024 字节。
ri= ResumeIndex
指定开始或继续枚举的索引号。默认值为 0。
group= GroupName
指定要枚举的服务组。默认设置为所有组。
备注
如果参数及其值之间没有空格，（例如，是 type= own，而不是 type=own），则操作会失败。
queryex 操作可以显示有关服务的下列信息：SERVICE_NAME（服务的注册表子项名）、TYPE、STATE（以及不可用的状态）、WIN32_EXIT_B、SERVICE_EXIT_B、CHECKPOINT、WAIT_HINT、PID 和 FLAGS。
在某些情况下，type= 参数可以使用两次。type= 参数的第一次出现指定是否查询服务、驱动器或所有这些项。type= 参数的第二次出现指定一个由 create 操作进一步缩小查询范围的类型。
当 queryex 命令的显示结果超过了枚举缓冲区的大小时，显示类似于以下内容的消息： 
Enum: more data, need 2130 bytes start resume at index 75
要显示剩余的 queryex 信息，请重新运行 queryex，将 bufsize= 设置为所需的字节数，并将 ri= 设置为指定的索引。例如，在命令行键入下面的指令会显示剩余的输出：
sc queryex bufsize= 2130 ri= 75
下面的示例显示了如何使用 sc queryex 命令：
sc queryex messenger
sc queryex group= ""
20、sc querylock