# ----------------------------------------------------------------- # Script: SafeCloud - RunAs System (v2 - Manejo de Exit Code) # OBJETIVO: Ejecuta un script como SYSTEM y valida los códigos de # salida 0 (Exito) y 1 (Exito con advertencia, ej: reg.exe) # ----------------------------------------------------------------- # Esta variable $ScriptToRun es inyectada por la UI de Action1 Write-Host "Iniciando ejecución como SISTEMA de: $ScriptToRun" # --- 1. Definición de Variables --- $RutaApp = "C:\ProgramData\SafeCloud" $Lanzador = Join-Path -Path $RutaApp -ChildPath "safecloud-run.cmd" $Argumento = $ScriptToRun # --- 2. EJECUCIÓN COMO SISTEMA (Manejo de Exit Code) --- try { Write-Host "Ejecutando: $Lanzador $Argumento" # --- (AQUÍ ESTÁ EL CAMBIO) --- # 1. Quitamos -ErrorAction Stop para que el try/catch no falle con un Exit Code 1. # 2. Añadimos -PassThru para que Start-Process nos devuelva el objeto del proceso. $process = Start-Process -FilePath $Lanzador -ArgumentList $Argumento -Wait -NoNewWindow -PassThru $exitCode = $process.ExitCode Write-Host "Proceso finalizado. Código de salida (Exit Code): $exitCode" # 3. Validamos el código de salida manualmente. # Aceptamos 0 (Exito estándar) y 1 (Exito de 'reg.exe') if ($exitCode -eq 0 -or $exitCode -eq 1) { Write-Host "Ejecución como SISTEMA completada exitosamente." } else { # Si es cualquier otro código, ahora sí lo reportamos como un error real. Write-Error "ERROR FATAL: El proceso devolvió un código de error inesperado: $exitCode" exit $exitCode } } catch { # Este 'catch' ahora solo atrapará errores de PowerShell (ej: si no se encuentra safecloud-run.cmd) Write-Error "ERROR FATAL de PowerShell. Detalles: $_" exit 1 }