Saltar al contenido

Cómo crear un servicio de Windows

abril 9, 2021

A veces, necesita una aplicación o un script para seguir ejecutándose, ya sea que haya iniciado sesión en su computadora o no. Tal vez sea un script de PowerShell para monitorear puertos o un servidor web que aloja una página en su red doméstica.

El punto es que si desea que un proceso, script o programa se ejecute mientras la computadora esté encendida, deberá crear un servicio de Windows.

¿Qué necesito para crear un servicio de Windows?

Para crear un servicio de Windows en Windows 10, existen algunos requisitos previos:

  • Acceso de administrador en la computadora
  • Algo para ejecutar como un servicio (PowerShell Script, programa, etc.)
  • Administrador de servicios sin succión (NSSM) instalado

¿Qué es el administrador de servicios que no succiona?

Sí, no se puede soltar un nombre así sin explicarlo. Seguro que el nombre es desafortunado, pero es exacto. Non-Sucking Service Manager (NSSM) es posiblemente la forma más fácil de crear un servicio de Windows que sea altamente confiable y configurable. Además, es software gratuito y de código abierto (OSS).

NSSM se puede utilizar a través del símbolo del sistema de Windows o una interfaz gráfica de usuario (GUI). Esto significa que cualquiera puede usarlo. NSSM se puede utilizar en cualquier versión de Windows que se remonta a, e incluye, Windows 2000. Hay versiones de 32 y 64 bits. Si está utilizando una computadora de 64 bits, pruebe esa versión primero. Si no funciona, vuelva a la versión de 32 bits.

Puede descargar NSSM desde el sitio web, clonar NSSM desde Git o instalar NSSM con Chocolatey. Chocolatey es un administrador de paquetes para Windows. Los métodos de instalación variarán según la ruta que tome. Consulte las instrucciones de NSSM. Para nuestro ejemplo, lo estamos descargando del sitio web de NSSM y lo instalamos en C: WINDOWS system32.

Cree un servicio de Windows con NSSM

Para este ejemplo, crearemos un servicio a partir de un script de PowerShell para registrar el porcentaje de carga promedio de la CPU.

  1. Copie y guarde este script como log-CPULoadPercentage.ps1 a un lugar al que probablemente nadie más pueda acceder. Intenta crear el directorio C: / Scripts y almacenarlo allí. Además, cree una carpeta en Scripts llamada Registros. Tenga en cuenta que la ruta al script es C: /Scripts/log-CPULoadPercentage.ps1. Lo necesitarás más tarde.

Nota: Todas las líneas siguientes seguidas del símbolo # son comentarios y no afectarán al script.

CLS #Optional. I like to use this to clear the terminal when testing.

#Make sure you have a folder called Logs in the same directory as this script
#The log is where the records will be stored.
Start-Transcript -Path "$PSScriptRootLogslog-CPULoadPercentage-$(get-date -f yyyy-MM-dd).txt" -Append

#While loop keeps it running until manually stopped
While ($True){
     #Creates a timestamp to know when the measurement was taken
     $timeStamp = get-date -f yyyy-MM-h:mm:ss

     #Gets the average load percentage at that time, then waits 5 seconds to do it again.
     $cpuLoadPercent = Get-CimInstance win32_processor | Measure-Object -Property LoadPercentage -Average | Select-Object Average;Start-Sleep -Seconds 5

     #Isolates just the average so there isn't a weird @{Average=13} string
     $cpuLoadPercent = $cpuLoadPercent.Average

     #writes results to screen, or in this case to the log
     Write-Host "$timeStamp CPU Load Percentage $cpuLoadPercent"
}

Stop-Transcript
  1. Esto se puede hacer en el Símbolo del sistema de Windows o Potencia Shell. Ábrelo como administrador.
  2. Ingrese el comando nssm install logCPUAvg y ejecutarlo. El Instalador del servicio NSSM se abrirá la ventana.
  1. Haga clic en el botón de puntos suspensivos junto al Sendero: campo, navegue hasta el powershell.exe que normalmente se encuentra en C: Windows System32 . Seleccione powershell.exe. El Sendero: y Directorio de inicio: Los campos se completarán automáticamente.
  1. Ingrese lo siguiente en el Argumentos: campo: -ExecutionPolicy Bypass -NoProfile -File «C: PathToScript get-Script.ps1», donde la última parte es la ruta a su secuencia de comandos de PowerShell y el nombre de la secuencia de comandos.
  1. Selecciona el Detalles pestaña. Ingrese lo que le gustaría que el servicio se muestre como en el administrador de servicios de Windows en el Nombre para mostrar: campo. Luego, ingrese lo que hace en el Descripción: campo. El Tipo de inicio: se puede configurar como Automático, Automático (inicio retrasado), Manual, o Desactivado. Para este ejercicio, Automático es bueno.
  1. Selecciona el Acceder pestaña. Seleccione Esta cuenta: botón de opción e ingrese la cuenta y la contraseña con las que se ejecutará el servicio. Deberá elegir una cuenta con la que se ejecutará el servicio. Idealmente, tendrá una cuenta de Windows creada solo para ejecutar este servicio. Los permisos de esta cuenta deben limitarse solo a lo que debe hacer el servicio. Puedes elegir el Cuenta del sistema local, pero no se recomienda por razones de seguridad.

Hay varias otras pestañas que se pueden utilizar para personalizar el servicio. Para este ejercicio, los valores predeterminados en esas pestañas son suficientes. Selecciona el Instalar servicio botón.

  1. Cuando se instala el servicio, verá el ¡El servicio “logCPUAvg” se instaló correctamente! ventana. Seleccione OK para cerrarlo. Eso concluye la instalación.
  1. Abre el Administrador de servicios de Windows y asegúrese de que el servicio esté ahí.
  1. Ejecute el servicio para asegurarse de que se ejecute.
  1. Para verificar que este servicio se está ejecutando, use Explorador de archivos para navegar hasta donde se supone que se debe guardar el registro para ver si existe.

nssm-check-log.png

Eliminación de un servicio de Windows con NSSM

Tal vez ya no necesite monitorear la carga de su CPU, por lo que le gustaría deshacerse del servicio. Afortunadamente, NSSM lo hace fácil.

  1. En el Administrador de servicios de Windows, detenga el servicio. Haga esto seleccionando el Carga promedio de la CPU de registro servicio a continuación, seleccionando el botón cuadrado de parada en la barra de herramientas o el Detener el servicio enlace en el lado izquierdo.
  1. Abra el Símbolo del sistema de Windows o Potencia Shell como administrador.
  2. Ingrese el comando nssm eliminar logCPUAvg y ejecuta el comando.
  1. NSSM le pedirá que confirme. Seleccione .
  1. Cuando se elimina el servicio, verá el ¡El servicio “logCPUAvg” se eliminó correctamente! Confirmación. Seleccione OK y tu estas listo.

Eso es todo. Es una buena idea consultar al administrador de servicios para asegurarse de que el servicio ya no esté disponible. Si aún ve el servicio, es posible que deba actualizar la pantalla y debería desaparecer.

Los servicios son una excelente manera de ejecutar aplicaciones o scripts que deben ejecutarse todo el tiempo, reiniciarse si fallan o necesitan privilegios diferentes a los del usuario actual. Si no necesita su aplicación o script para hacer todas esas cosas, considere usar una Tarea Programada en su lugar.