Cómo crear un servicio de Windows

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(PowerShell script to monitor ports) o un servidor web que aloja una página en su red doméstica(web server hosting a page on your home network) .

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

¿Qué necesito para crear un servicio de Windows?(What Do I Need to Create a Windows Service?)

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

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

¿Qué es el administrador de servicios sin succión?(What Is the Non-Sucking Service Manager?)

Sí, no puedes dejar caer un nombre así sin explicarlo. Claro que el nombre es desafortunado, pero es exacto. Se puede decir que Non-Sucking Service Manager ( NSSM ) es 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(Open Source Software) (OSS).

NSSM se puede utilizar mediante el símbolo del sistema de Windows(Windows Command Prompt) o una interfaz gráfica de usuario ( GUI ). Esto significa que cualquiera puede usarlo. NSSM se puede utilizar en cualquier versión de Windows desde (Windows)Windows 2000 inclusive . Hay versiones de 32 y 64 bits . (32-bit and 64-bit)Si está utilizando una computadora de 64 bits, pruebe esa versión primero. Si no funciona, recurra a la versión de 32 bits. 

Puede descargar NSSM desde el sitio web(download NSSM from the website) , clonar NSSM desde Git(clone NSSM from Git) o instalar NSSM con Chocolatey(install NSSM with Chocolatey) . Chocolatey es un administrador de paquetes para Windows(Chocolatey is a package manager for Windows) . Los métodos de instalación(Installation) variarán según la ruta que tome. Por favor(Please) consulte las instrucciones de NSSM . Para nuestro ejemplo, estamos descargando desde el sitio web de NSSM e instalándolo en C:\WINDOWS\system32 .

Crear un servicio de Windows con NSSM(Create a Windows Service With NSSM)

Para este ejemplo, crearemos un servicio a partir de un script de PowerShell(PowerShell script) para registrar el porcentaje de carga promedio de la CPU(CPU average load percentage)

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

Nota(Note) : Todas las líneas a continuación seguidas del símbolo # son comentarios y no afectarán el 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 "$PSScriptRoot\Logs\log-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(Windows Command Prompt) o en PowerShell. Ábrelo como Administrador(Open it as Administrator) .
  2. Ingrese el comando nssm install logCPUAvg y ejecútelo. Se abrirá la ventana del instalador del servicio NSSM .(NSSM service installer)

  1. Haga clic(Click) en el botón de puntos suspensivos junto al campo Ruta:,(Path:) navegue hasta powershell.exe que normalmente se encuentra en C:\Windows\System32\ . Seleccione powershell.exe. Los campos Ruta:(Path:) y Directorio de inicio:(Startup directory:) se completarán automáticamente.

  1. Ingrese lo siguiente en el campo Argumentos : (Arguments:)-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.(PowerShell)

  1. Seleccione la pestaña Detalles . (Details)Ingrese cómo desea que se muestre el servicio en el administrador de servicios de (Services)Windows en el campo Nombre para mostrar:. (Display name: )Luego, ingrese lo que hace en el campo Descripción:. (Description:)El tipo de inicio:(Startup type: ) se puede configurar como Automático(Automatic) , Automático (Inicio retrasado)(Automatic (Delayed Start)) , Manual o Deshabilitado(Disabled) . Para este ejercicio, Automático(Automatic) es bueno.

  1. Seleccione la pestaña Iniciar sesión . (Log on )Seleccione Esta cuenta(This account) : botón de radio e ingrese la cuenta y la contraseña con la que se ejecutará el servicio. Deberá elegir una cuenta en 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 el servicio necesita hacer. Puede elegir la cuenta del sistema local(Local System account) , pero no se recomienda por razones de seguridad.

Hay varias otras pestañas que se pueden usar para personalizar el servicio. Para este ejercicio, los valores predeterminados en esas pestañas son suficientes. Seleccione el botón Instalar servicio(Install service ) .

  1. Cuando el servicio esté instalado, verá que el Service “logCPUAvg” installed successfully! ventana. Seleccione Aceptar(OK) para cerrarlo. Eso concluye la instalación.

  1. Abra el Administrador de servicios de Windows(Windows Services Manager ) y asegúrese de que el servicio esté allí.

  1. Ejecute(Run) el servicio para asegurarse de que se ejecutará.

  1. Para verificar que este servicio se está ejecutando, use el Explorador de archivos(File Explorer ) para navegar hasta donde se supone que debe guardarse el registro para ver si existe.

nssm-check-log.png

Eliminación de un servicio de Windows con NSSM(Removing a Windows Service With NSSM)

Tal vez ya no necesite monitorear la(monitor your CPU) 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(Windows Services Manager) , detenga el servicio. Haga esto seleccionando el servicio Log CPU Average Load y luego seleccionando el botón cuadrado de parada en la barra de herramientas o el enlace Detener el servicio(Stop the service) en el lado izquierdo.

  1. Abra el símbolo del sistema de Windows(Windows Command Prompt ) o PowerShell como administrador.
  2. Ingrese el comando nssm remove logCPUAvg y ejecute el comando. 

  1. NSSM le pedirá que confirme. Seleccione (Yes) .

  1. Cuando se elimine el servicio, verá que el Service “logCPUAvg” removed successfully! Confirmación. Selecciona Aceptar(OK) y listo.

Eso es todo. Es una buena idea verificar el administrador de servicios para asegurarse de que el servicio ya no esté allí. 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 secuencia de comandos para hacer todas esas cosas, considere usar una Tarea programada(using a Scheduled Task) en su lugar.



About the author

Soy un experto experimentado en Windows 10 y 11/10, con experiencia tanto en navegadores como en aplicaciones para teléfonos inteligentes. He sido ingeniero de software durante más de 15 años y he trabajado con varias empresas de renombre, incluidas Microsoft, Google, Apple, Ubisoft y más. También he enseñado desarrollo de Windows 10/11 a nivel universitario.



Related posts