test(install): cubrir la ruta personalizada C:\Aduanasoft\CloudRestoreAS-win
Esa ruta es el peor caso posible y existe en produccion: la ruta por omision C:\Aduanasoft\CloudRestoreAS es PREFIJO DE CADENA de ella, asi que cualquier comparacion hecha con startsWith daria por iguales dos instalaciones distintas — y el resultado seria el fallo silencioso otra vez, actualizar una carpeta y arrancar la otra. El flujo ya la manejaba bien (Test-SamePath compara por igualdad exacta tras normalizar), pero nada lo probaba: la emulacion usaba declarada/otra-carpeta, nombres sin relacion entre si, que un startsWith mal puesto pasaria sin problema. - Escenario `sufijo` en emular-actualizacion-windows.ps1: instalacion en ...\CloudRestoreAS-win y tarea apuntando a ...\CloudRestoreAS. Verificado en Windows: reapunta la tarea, el proceso queda corriendo desde -win y el sello en la version nueva. - Nuevo scripts/probar-funciones-install.ps1: extrae las funciones del instalador por AST y las ejercita contra una tarea simulada, sin elevacion. Cubre los casos limite de la comparacion de rutas (el par de prefijo en ambos sentidos, comillas, barra final, mayusculas, `..`, ruta vacia) y que Sync-AgentTaskPath falle cuando no puede corregir. BUILD.md documenta por que se compara por igualdad exacta y no por prefijo. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
17
BUILD.md
17
BUILD.md
@@ -235,16 +235,27 @@ sabiendas el binario anterior es peor que abortar. Y la confirmación de arranqu
|
||||
del proceso, no solo su nombre — un agente viejo que nunca se detuvo satisface igual de bien un
|
||||
`Get-Process -Name CloudRestoreAS`.
|
||||
|
||||
### Rutas de instalación personalizadas
|
||||
|
||||
`C:\Aduanasoft\CloudRestoreAS-win` es el caso a tener presente, y existe en producción: la ruta por
|
||||
omisión `C:\Aduanasoft\CloudRestoreAS` es **prefijo de cadena** de ella. Por eso las rutas se
|
||||
comparan por **igualdad exacta tras normalizar** (comillas, barra final, mayúsculas) y nunca con
|
||||
`startsWith` — que daría por iguales dos instalaciones distintas. En el panel eso vive en un solo
|
||||
sitio, `sameWindowsPath()`; en el instalador, en `Test-SamePath`.
|
||||
|
||||
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
|
||||
scripts\emular-actualizacion-windows.ps1 -Installer .\install.ps1 -Escenario sufijo # ...-win
|
||||
scripts\probar-funciones-install.ps1 # casos límite
|
||||
```
|
||||
|
||||
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.
|
||||
La emulación 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.
|
||||
`probar-funciones-install.ps1` extrae las funciones del instalador por AST y las ejercita contra una
|
||||
tarea simulada. Ninguno de los dos 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
|
||||
|
||||
Reference in New Issue
Block a user