Files
devolucion_proveedores/deploy/windows/desinstalar-servicio.ps1
T
georgeandClaude Sonnet 5.5 699dd983d0 Despliegue en Windows con NSSM en lugar de WinSW
El servicio de Windows pasa a administrarse con NSSM (decisión del usuario: WinSW no se
consideró lo bastante estable).

- instalar-servicio.ps1: recibe -Nssm (ruta de nssm.exe) y configura el servicio con
  `nssm install` / `nssm set` (arranque automático, reinicio a los 10 s, logs a logs\ rotados
  a los 10 MB). Nueva opción -SoloMostrar que imprime los comandos sin ejecutarlos ni exigir
  administrador. Si un ajuste falla, quita el servicio a medio configurar.
- desinstalar-servicio.ps1: usa `nssm stop` y `nssm remove`.
- Se elimina la plantilla XML de WinSW.
- DEPLOY.md: pasos con NSSM, sección para administrar el servicio, aviso de usar la
  compilación 2.24-101 en Windows 10/11 y Server 2019/2022 (la 2.24 estable puede no arrancar),
  y limpieza de logs rotados (NSSM no limita cuántos conserva). Ya no se requiere .NET Framework.
- CLAUDE.md y README de la API actualizados.

Sin probar aún en Windows: solo se comprobó la sintaxis y los comandos generados (-SoloMostrar).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 08:55:29 -05:00

30 lines
1.2 KiB
PowerShell

<#
.SYNOPSIS
Detiene y elimina el servicio de Windows. No borra los archivos ni los logs.
#>
[CmdletBinding()]
param([string]$NombreServicio = 'DevolucionProveedores')
$ErrorActionPreference = 'Stop'
$esAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $esAdmin) { Write-Host 'ERROR: Ejecute este script en una consola de PowerShell como administrador.' -ForegroundColor Red; exit 1 }
if (-not (Get-Service -Name $NombreServicio -ErrorAction SilentlyContinue)) {
Write-Host "El servicio '$NombreServicio' no existe."
exit 0
}
$nssm = Join-Path $PSScriptRoot 'servicio\nssm.exe'
if (Test-Path $nssm) {
& $nssm stop $NombreServicio | Out-Null # si ya estaba detenido, no es un error
& $nssm remove $NombreServicio confirm | Out-Null
} else {
Write-Host "No se encontró $nssm; se usa sc.exe."
& sc.exe stop $NombreServicio | Out-Null
& sc.exe delete $NombreServicio | Out-Null
}
if ($LASTEXITCODE -ne 0) { Write-Host "ERROR: no se pudo eliminar el servicio '$NombreServicio'." -ForegroundColor Red; exit 1 }
Write-Host "Servicio '$NombreServicio' eliminado. Los archivos y los logs siguen en $PSScriptRoot."