简介

sc是一个windows系统的命令行工具。用来与服务控制管理器和服务进行通信的命令行程序。

服务:Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。----摘自百度百科
其实服务就是一种随电脑开机启动并运行在后台的程序。当然也可以选择关闭就不会开机自启。服务管理信息存在注册表中
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 目录

详解

服务操作

win+r 输入 services.msc 回车打开服务。
1234541.png
点击右键查看属性。
48745641651.png
可以看到服务名称,服务程序的路径,启动类型,服务状态等信息。

参看sc帮助文档

sc没有 -h 参数,直接输回车即可。当然 sc -h 也行,会提示错误并输出帮助文档。

C:\Users>sc
描述:
        SC 是用来与服务控制管理器和服务进行通信
        的命令行程序。
用法:
        sc <server> [command] [service name] <option1> <option2>...


        <server> 选项的格式为 "\\ServerName"
        可通过键入以下命令获取有关命令的更多帮助: "sc [command]"
        命令:
          query-----------查询服务的状态,
                          或枚举服务类型的状态。
          queryex---------查询服务的扩展状态,
                          或枚举服务类型的状态。
          start-----------启动服务。
          pause-----------向服务发送 PAUSE 控制请求。
          interrogate-----向服务发送 INTERROGATE 控制请求。
          continue--------向服务发送 CONTINUE 控制请求。
          stop------------向服务发送 STOP 请求。
          config----------更改服务的配置(永久)。
          description-----更改服务的描述。
          failure---------更改失败时服务执行的操作。
          failureflag-----更改服务的失败操作标志。
          sidtype---------更改服务的服务 SID 类型。
          privs-----------更改服务的所需特权。
          managedaccount--更改服务以将服务帐户密码
                          标记为由 LSA 管理。
          qc--------------查询服务的配置信息。
          qdescription----查询服务的描述。
          qfailure--------查询失败时服务执行的操作。
          qfailureflag----查询服务的失败操作标志。
          qsidtype--------查询服务的服务 SID 类型。
          qprivs----------查询服务的所需特权。
          qtriggerinfo----查询服务的触发器参数。
          qpreferrednode--查询服务的首选 NUMA 节点。
          qmanagedaccount-查询服务是否将帐户
                          与 LSA 管理的密码结合使用。
          qprotection-----查询服务的进程保护级别。
          quserservice----查询用户服务模板的本地实例。
          delete ----------(从注册表中)删除服务。
          create----------创建服务(并将其添加到注册表中)。
          control---------向服务发送控制。
          sdshow----------显示服务的安全描述符。
          sdset-----------设置服务的安全描述符。
          showsid---------显示与任意名称对应的服务 SID 字符串。
          triggerinfo-----配置服务的触发器参数。
          preferrednode---设置服务的首选 NUMA 节点。
          GetDisplayName--获取服务的 DisplayName。
          GetKeyName------获取服务的 ServiceKeyName。
          EnumDepend------枚举服务依赖关系。

        以下命令不需要服务名称:
        sc <server> <command> <option>
          boot------------(ok | bad)指示是否应将上一次启动另存为
                          最近一次已知的正确启动配置
          Lock------------锁定服务数据库
          QueryLock-------查询 SCManager 数据库的 LockStatus
示例:
        sc start MyService


QUERY 和 QUERYEX 选项:
        如果查询命令带服务名称,将返回
        该服务的状态。其他选项不适合这种
        情况。如果查询命令不带参数或
        带下列选项之一,将枚举此服务。
    type=    要枚举的服务的类型(driver, service, userservice, all)
             (默认 = service)
    state=   要枚举的服务的状态 (inactive, all)
             (默认 = active)
    bufsize= 枚举缓冲区的大小(以字节计)
             (默认 = 4096)
    ri=      开始枚举的恢复索引号
             (默认 = 0)
    group=   要枚举的服务组
             (默认 = all groups)

语法示例
sc query                - 枚举活动服务和驱动程序的状态
sc query eventlog       - 显示 eventlog 服务的状态
sc queryex eventlog     - 显示 eventlog 服务的扩展状态
sc query type= driver   - 仅枚举活动驱动程序
sc query type= service  - 仅枚举 Win32 服务
sc query state= all     - 枚举所有服务和驱动程序
sc query bufsize= 50    - 枚举缓冲区为 50 字节
sc query ri= 14         - 枚举时恢复索引 = 14
sc queryex group= ""    - 枚举不在组内的活动服务
sc query type= interact - 枚举所有不活动服务
sc query type= driver group= NDIS     - 枚举所有 NDIS 驱动程序

windows好呀,清一色中文太友好了。

sc常用操作

  1. sc query 与 findstr 实现模糊查询
    sc query state= all | findstr /I "mysql"
  2. 同时显示服务对应PID 和 FlAGES
    sc queryex 服务名
  3. 查看window服务的详细配置
    sc qc 服务名
  4. 启动服务
    sc start 服务名 还可用 net start 服务名 启动
  5. 暂停服务
    sc stop 服务名 还可用 net stop服务名 暂停
  6. 恢复服务
    sc continue 服务名
  7. 设置服务的启动类型
    sc config 服务名 start= <boot | system | auto | demand | disabled>

本人遇到场景

重新安装mysql,但是之前有安装过,直接删掉mysql的根目录是不行的,因为还有mysql服务存在,所以需要先删掉mysql的服务才能重新安装。
sc delete mysql 删除mysql服务。当然执行这个命令不一定能彻底删除,在服务页面还会看到mysql服务,但是在注册表中可能还存在,所以需要打开注册表在 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 目录下找到mysql删掉。(上文有提到这个注册表路径),然后重启电脑。

结束语

注意:
使用 sc delete 命令不一定可以彻底删除服务,需要在注册表在删除,然后重启。