sc - Administrar servicios

Mantenido el

El comando sc administra los servicios de Windows. Un servicio es un programa que sigue ejecutándose en segundo plano sin que nadie inicie sesión, como la impresión, Windows Update o las funciones de red.

Con sc puede comprobar el estado de un servicio, iniciarlo y detenerlo, y cambiar su tipo de inicio (automático, manual o deshabilitado) solo desde la línea de comandos. No necesita abrir la ventana de Servicios (services.msc), lo que también hace que sc sea ideal para archivos por lotes.

Sintaxis básica del comando sc

sc <comando> <nombre del servicio> [opciones]

El primer argumento indica qué hacer, seguido del nombre del servicio de destino. Los comandos principales son los siguientes.

ComandoDescripción
sc queryMuestra el estado de un servicio
sc qcMuestra la configuración de un servicio (tipo de inicio, etc.)
sc startInicia un servicio
sc stopDetiene un servicio
sc pausePausa un servicio
sc continueReanuda un servicio pausado
sc configCambia la configuración de un servicio (tipo de inicio, etc.)
sc createRegistra un servicio nuevo
sc deleteElimina el registro de un servicio
En PowerShell, escriba sc.exe

En Windows PowerShell 5.1, sc es un alias del cmdlet Set-Content. Escribir sc query Spooler allí no administra servicios, así que incluya la extensión, como en sc.exe query Spooler. Los comandos de este artículo suponen que los ejecuta en el Símbolo del sistema.

Nombre del servicio y nombre para mostrar

Cada servicio tiene un nombre para mostrar que aparece en services.msc (por ejemplo, Print Spooler) y un nombre de servicio distinto que se usa en los comandos (por ejemplo, Spooler). sc utiliza el nombre de servicio.

La salida de sc query muestra el nombre del servicio (SERVICE_NAME) junto al nombre para mostrar (DISPLAY_NAME), así que puede relacionarlos.

Comprobar el estado de un servicio

Ejecute sc query con el nombre del servicio.

sc query Spooler
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>sc query Spooler
SERVICE_NAME: Spooler
TYPE : 110 WIN32_OWN_PROCESS (interactive)
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
C:\users\user>

STATE es el estado actual. Los valores principales son los siguientes.

Valor de STATESignificado
RUNNINGEn ejecución
STOPPEDDetenido
START_PENDINGIniciándose
STOP_PENDINGDeteniéndose
PAUSEDEn pausa

Si ejecuta sc query sin nombre de servicio, se muestra la lista de servicios en ejecución. Para incluir también los detenidos, especifique state= all.

sc query type= service state= all
Se necesita un espacio después de = en las opciones

Las opciones de sc necesitan un espacio justo después del =, como en type= service. Escribir type=service produce un error. No ponga un espacio antes del =.

Cuando la lista es larga, combínela con more o find para leerla mejor.

sc query type= service state= all | find "SERVICE_NAME"

Comprobar la configuración de un servicio

sc qc (query config) muestra el tipo de inicio y la ruta del ejecutable.

sc qc Spooler

START_TYPE muestra el tipo de inicio y BINARY_PATH_NAME muestra el ejecutable del servicio.

Iniciar y detener un servicio

Use sc start para iniciar un servicio y sc stop para detenerlo.

sc start Spooler
sc stop Spooler
Se requieren permisos de administrador

Iniciar, detener y reconfigurar un servicio normalmente requiere permisos de administrador. Si lo ejecuta en un Símbolo del sistema normal, aparece “Acceso denegado” (error 5). Consulte el artículo relacionado para saber cómo ejecutar como administrador. Comprobar el estado (sc query) funciona sin permisos de administrador.

sc stop solo envía una solicitud de detención y no espera a que el servicio termine de detenerse. Justo después puede aparecer STOP_PENDING, así que espere un momento y use sc query para confirmar que haya llegado a STOPPED.

Reiniciar un servicio

sc no tiene un comando de reinicio, así que detenga el servicio y vuelva a iniciarlo. Inserte timeout para darle tiempo a detenerse.

restart-spooler.cmd
@echo off

sc stop Spooler
timeout /t 3 /nobreak >nul
sc start Spooler

Algunos servicios tardan más de 3 segundos en detenerse. Cuando necesite estar seguro, use la técnica “Esperar un estado” que se describe más abajo.

Diferencias con net start y net stop

net start <nombre del servicio> y net stop <nombre del servicio> también pueden iniciar y detener servicios.

net stop Spooler
net start Spooler

net stop espera a que el servicio se detenga antes de devolver el control. Además, detiene los servicios que dependen de él, después de pedir confirmación. Si solo quiere detener e iniciar un servicio, net es más cómodo. Si también necesita comprobar el estado o cambiar la configuración, sc es la mejor opción.

Cambiar el tipo de inicio

La opción start= de sc config cambia lo que ocurre al iniciar Windows.

sc config Spooler start= demand
ValorTipo de inicio
autoAutomático
delayed-autoAutomático (inicio retrasado)
demandManual
disabledDeshabilitado
No deshabilite servicios importantes

Si deshabilita un servicio, las funciones que dependen de él dejarán de estar disponibles a partir del siguiente inicio. No cambie la configuración de un servicio que no comprenda. Anote la configuración actual con sc qc antes de cambiar nada para poder restaurarla.

Errores y cómo resolverlos

Cuando sc falla, muestra un mensaje con un número de error, como [SC] OpenService FAILED 1060:.

ErrorCausa habitual y solución
5Acceso denegado. Ejecute como administrador
1056El servicio ya se está ejecutando. Compruebe el estado con sc query
1060El servicio no existe. Compruebe que usó el nombre del servicio y no el nombre para mostrar
1058No se puede iniciar porque está deshabilitado. Cambie el tipo de inicio con sc config
1062El servicio no se ha iniciado (intentó detener uno que ya estaba detenido)

Puede consultar el significado de un número de error con net helpmsg, como en net helpmsg 1060.

Comprobar el estado en un archivo por lotes

Buscar en la salida de sc query con find le indica si un servicio se está ejecutando.

check-service.cmd
@echo off

sc query Spooler | find "RUNNING" >nul
if errorlevel 1 (
  echo Print Spooler esta detenido.
) else (
  echo Print Spooler se esta ejecutando.
)

find devuelve el código de salida 0 cuando encuentra una línea coincidente y 1 cuando no, así que if errorlevel 1 gestiona el caso “no encontrado”. Los valores de STATE están en inglés sea cual sea el idioma de Windows, por lo que el mismo código funciona en cualquier idioma.

Esperar un estado

Para esperar a que termine un inicio o una detención, compruebe repetidamente hasta que el estado alcance el valor deseado.

wait-stopped.cmd
@echo off

sc stop Spooler >nul

:wait
sc query Spooler | find "STOPPED" >nul
if errorlevel 1 (
  timeout /t 1 /nobreak >nul
  goto wait
)

echo Detenido.
Cuidado con los bucles infinitos

Si el servicio no puede detenerse, este ejemplo espera para siempre. En un uso real, es más seguro fijar un número máximo de intentos con una variable contador.

Registrar y eliminar un servicio

sc create registra su propio programa como servicio. Indique la ruta del ejecutable en binPath=.

sc create MyService binPath= "C:\tools\myservice.exe" start= demand

Cuando ya no lo necesite, elimine el registro con sc delete.

sc delete MyService
La eliminación no se puede deshacer

sc delete elimina el registro del servicio sin pedir confirmación. Eliminar un servicio incluido en Windows puede dejar el sistema sin poder funcionar correctamente. Úselo solo con servicios que haya registrado usted mismo.

Tenga en cuenta que un programa o archivo por lotes normal no funciona como servicio tal cual. Para ejecutarse como servicio, un programa debe poder responder a las solicitudes del Administrador de control de servicios.

Resumen

Lo que quiere hacerComando
Comprobar el estado de un serviciosc query <nombre del servicio>
Listar todos los serviciossc query type= service state= all
Comprobar el tipo de iniciosc qc <nombre del servicio>
Iniciar un serviciosc start <nombre del servicio>
Detener un serviciosc stop <nombre del servicio>
Cambiar el tipo de iniciosc config <nombre del servicio> start= demand
Comprobar si se está ejecutandosc query <nombre del servicio> | find "RUNNING"
Registrar o eliminar un serviciosc create / sc delete

Artículos relacionados

Preguntas de práctica

Problema de práctica

Ejecuta sc query Spooler en PowerShell, pero no aparece información del servicio. ¿Cuál es la solución correcta?

Elige una respuesta.

  1. Ejecutarlo de nuevo como administrador
  2. Escribir también la extensión, como en sc.exe query Spooler
  3. Sustituir el nombre del servicio por el nombre para mostrar

Problema de práctica

¿Qué comando cambia el tipo de inicio de un servicio a Manual?

Elige una respuesta.

  1. sc config Spooler start=demand
  2. sc config Spooler start= demand
  3. sc start Spooler manual
#Símbolo del sistema #Archivos por lotes #Línea de comandos #Comando #Servicios #Permisos de administrador