En el soporte en terreno, hay un punto de inflexión muy claro frente a un equipo problemático: cuando la lentitud ya no es culpa de los archivos temporales, sino que el propio sistema operativo tiene los binarios corruptos. Pantallazos azules esporádicos, el menú de inicio que no abre, o Windows Update bloqueado.
Todos los administradores de sistemas conocemos el antídoto de memoria: sfc /scannow y la tríada de comandos de DISM.
Sin embargo, teclear estos comandos manualmente en cada ticket es ineficiente y propenso a errores tipográficos. Además, si el servicio TrustedInstaller está suspendido, el proceso puede fallar a la mitad. El Botón 2: Reparar Sistema de PuntoBat V3.0 automatiza esta secuencia maestra, pero lo hace resolviendo un problema de arquitectura fundamental en Windows.
Aquí analizamos el código fuente de esta función clave:
El Código Fuente
private void btnReparar_Click(object sender, EventArgs e)
{
// AUDITORÍA: Registramos que el usuario interactuó con el botón
RegistrarLog("INTERFAZ_UI", "Clic en botón Reparar Windows", "Esperando confirmación del usuario...");
if (MessageBox.Show("Se iniciará la secuencia maestra de reparación (SFC y DISM).\n\nEste proceso abrirá una consola negra y puede tardar varios minutos. ¿Desea iniciar?", "Reparar Windows", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
try
{
// AUDITORÍA: El usuario confirmó la advertencia y se lanza la secuencia
RegistrarLog("BOTON_UI", "Inició Secuencia Maestra de Reparación", "sfc /scannow & dism /online /cleanup-image /restorehealth...");
// 1. LA SECUENCIA MAESTRA (Con el parche de encendido de TrustedInstaller añadido)
string comandos = "title Herramienta de Reparacion - PuntoBat & color 0A & net start trustedinstaller & sfc /scannow & dism /online /cleanup-image /scanhealth & dism /online /cleanup-image /restorehealth & sfc /scannow & echo. & echo [OK] Reparacion finalizada. Presione cualquier tecla para volver a PuntoBat... & pause >nul";
// 2. TRUCO DE ARQUITECTURA: Evitamos el "Síndrome de 32-bits"
string rutaCMD = "cmd.exe";
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
rutaCMD = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), @"sysnative\cmd.exe");
}
// 3. CONFIGURAR EL PROCESO
System.Diagnostics.Process proceso = new System.Diagnostics.Process();
proceso.StartInfo.FileName = rutaCMD;
// Le pasamos la secuencia completa a CMD
proceso.StartInfo.Arguments = "/c \"" + comandos + "\"";
// 4. VISUALIZACIÓN Y PERMISOS (AQUÍ SÍ MOSTRAMOS LA VENTANA)
proceso.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
proceso.StartInfo.CreateNoWindow = false;
// Blindaje Sysadmin: Forzamos que la consola pida permisos de Administrador
proceso.StartInfo.UseShellExecute = true;
proceso.StartInfo.Verb = "runas";
// 5. LANZAR EL MISIL
proceso.Start();
}
catch (Exception ex)
{
// AUDITORÍA: Registro exacto si Windows bloqueó por falta de permisos
RegistrarLog("ERROR_CRITICO", "Fallo al iniciar Reparación Maestra", ex.Message);
MessageBox.Show("Operación cancelada. Windows bloqueó la acción porque requiere permisos de Administrador.\n\nDetalle: " + ex.Message, "Permisos Denegados", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
// AUDITORÍA: Registramos si el usuario vio la advertencia y decidió no ejecutarlo
RegistrarLog("INTERFAZ_UI", "Canceló la Secuencia Maestra", "El usuario presionó 'No' en el cuadro de diálogo");
}
}
Anatomía de la Reparación Maestra
Este bloque de código esconde soluciones a problemas muy específicos del trabajo corporativo que un script .bat tradicional simplemente no puede manejar con gracia.
1. El Parche de “TrustedInstaller”
La variable comandos contiene la secuencia exacta de reparación. Antes de lanzar el escaneo, el código ejecuta net start trustedinstaller. El Instalador de Módulos de Windows es el único servicio con los privilegios reales para sobreescribir archivos del sistema corruptos. Encenderlo manualmente antes de invocar a DISM reduce drásticamente los errores de “Acceso Denegado” o fallos al 20% del escaneo.
Además, se aplica un “sándwich de comprobación”: se ejecuta SFC rápido, luego el motor pesado de DISM, y finalmente SFC de nuevo para validar que la imagen quedó perfectamente restaurada.
2. El Truco de Arquitectura: Esquivando “SysWOW64”
Esta es la joya de la corona del código. Cuando una aplicación C# compilada en 32-bits (o ejecutándose como proceso de 32-bits) llama a cmd.exe en un Windows de 64-bits, el sistema operativo hace una redirección invisible hacia la carpeta SysWOW64. ¿El problema? Las herramientas nativas de 64-bits como DISM fallan estrepitosamente si se ejecutan desde el CMD de 32-bits.
Para evitar este “Síndrome de 32-bits”, el código evalúa la arquitectura en tiempo real:
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
rutaCMD = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), @"sysnative\cmd.exe");
}
Al invocar la ruta virtual sysnative\cmd.exe, PuntoBat obliga a Windows a abrir la consola nativa de 64-bits, asegurando que DISM se ejecute con toda su potencia.
3. Transparencia Visual Intencional
A diferencia de otras rutinas de PuntoBat que corren 100% ocultas para no molestar al usuario (WindowStyle = Hidden), aquí intencionalmente mostramos la consola. Los procesos de restauración de imagen toman tiempo. Si ocultamos esta ventana, el técnico (o el usuario) pensaría que el equipo se congeló. Al mostrar la consola, mantenemos el control visual sobre el porcentaje de avance.
Por supuesto, se inyecta el verbo runas para invocar el Control de Cuentas de Usuario (UAC), asegurando que el proceso nazca con privilegios de Administrador absolutos. Todo esto, envuelto en el infalible sistema de logs de la aplicación para mantener una auditoría estricta de cada acción.
Transparencia Total Herramientas avanzadas requieren soluciones avanzadas, pero el código fuente abierto de PuntoBat V3.0 asegura que no hay cajas negras en el mantenimiento de tu infraestructura.
Si quieres auditar el código completo o implementar la herramienta en tu infraestructura, puedes revisar el repositorio oficial en GitHub.

No responses yet