docs: la tarea programada tiene que apuntar a lo que se instalo

BUILD.md gana la seccion del fallo silencioso y como reproducirlo con
scripts/emular-actualizacion-windows.ps1.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-31 10:28:20 -06:00
parent 0ac899f531
commit 399b0483d5
2 changed files with 45 additions and 0 deletions

View File

@@ -222,6 +222,30 @@ Reemplazar el binario de un servidor en producción no puede dejarlo sin restaur
3. **Se confirma que el agente volvió a arrancar** y, si no, se **revierte** al binario anterior.
El respaldo solo se descarta tras esa confirmación.
### La tarea programada tiene que apuntar a lo que se instaló
Reemplazar el binario es una operación por **ruta**; `Start-ScheduledTask` es por **nombre** y
ejecuta la ruta que la tarea lleva registrada en su acción. Cuando las dos no coinciden —una
instalación fuera de la carpeta por omisión, o movida de sitio— se copiaba el binario nuevo en un
lado y se arrancaba el viejo del otro: **el run terminaba en verde y el servidor seguía igual**.
`install.ps1` compara la acción de la tarea con el `-Prefix` y la **reapunta** si difieren,
conservando disparador, principal, ajustes y argumentos. Si no puede corregirla, falla: arrancar a
sabiendas el binario anterior es peor que abortar. Y la confirmación de arranque mira la **ruta**
del proceso, no solo su nombre — un agente viejo que nunca se detuvo satisface igual de bien un
`Get-Process -Name CloudRestoreAS`.
Para reproducirlo y comprobarlo sin un servidor, desde WSL o Windows:
```powershell
scripts\emular-actualizacion-windows.ps1 -Installer .\install.ps1 # caso roto
scripts\emular-actualizacion-windows.ps1 -Installer .\install.ps1 -Escenario alineada # caso normal
```
Monta un agente falso (un `.exe` real que se queda vivo), una instalación en una carpeta y una
tarea apuntando a otra, corre el instalador y dice si la actualización surtió efecto. No necesita
elevación ni toca la instalación real de la máquina.
`-UpdateInPlace` además no vuelve a registrar la tarea (así no pisa ajustes hechos sobre ella) y
se salta el bootstrap: una segunda instancia purgaría el `Temp\` de la que está viva. Es el modo
que usa el PANEL para actualizar.