Desarmando PuntoBat V3.0: El Código Detrás de la “Limpieza Profunda” (Botón 1)

PuntoBat 3.0

En el mundo del soporte TI en terreno, hay una regla no escrita: ante cualquier lentitud extrema del sistema operativo, errores de navegación o aplicaciones que se comportan de forma errática, el paso cero siempre es limpiar.

Hacer esto manualmente implica una coreografía repetitiva que quita minutos valiosos: presionar Win + R, escribir %temp%, borrar todo, omitir archivos bloqueados, repetir con C:\Windows\Temp, vaciar la papelera a mano y finalmente abrir una consola para hacer un ipconfig /flushdns y curar esos problemas de red fantasma.

El Botón 1: Limpieza Profunda de PuntoBat V3.0 fue diseñado para reducir esos 5 minutos de clics a una ejecución silenciosa de 3 segundos. Aquí desglosamos cómo se comunica la interfaz en C# con los motores nativos de Windows para lograrlo.

Codigo del Boton Limpieza Profunda

private async void btnLimpiar_Click(object sender, EventArgs e)
{
    // AVISO PREVIO: Recomendación de cerrar aplicaciones
    DialogResult confirmacion = MessageBox.Show(
        "Para obtener un mejor resultado y liberar más espacio, se recomienda cerrar todas las aplicaciones abiertas (navegadores, Office, carpetas, etc.) antes de continuar.\n\n¿Deseas ejecutar la limpieza ahora?",
        "Recomendación - PuntoBat V3.0",
        MessageBoxButtons.YesNo,
        MessageBoxIcon.Warning);

    // Si el usuario decide que no, abortamos la limpieza silenciosamente
    if (confirmacion == DialogResult.No)
    {
        return;
    }

    // AUDITORÍA: Registramos el clic solo si el usuario decidió continuar
    RegistrarLog("BOTON_UI", "Clic en Limpiar Temporales, Papelera y DNS", @"cmd.exe (del Temp/Prefetch) + PowerShell (Clear-RecycleBin)");

    try
    {
        // Envolvemos todo en una tarea asíncrona para que la interfaz no se "congele"
        await Task.Run(() =>
        {
            // 1. LIMPIEZA AGRESIVA CON CMD
            System.Diagnostics.Process cmdTemp = new System.Diagnostics.Process();
            cmdTemp.StartInfo.FileName = "cmd.exe";

            // /c: Ejecuta el string y luego termina el proceso cmd.exe
            // del: Elimina archivos
            // /q: Sin pedir confirmación | /f: Fuerza archivos bloqueados o de solo lectura | /s: Entra a subcarpetas
            string comandosCmd = @"/c del /q /f /s ""%TEMP%\*"" & del /q /f /s ""C:\Windows\Temp\*"" & del /q /f /s ""C:\Windows\Prefetch\*""";

            cmdTemp.StartInfo.Arguments = comandosCmd;
            cmdTemp.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            cmdTemp.StartInfo.CreateNoWindow = true;
            cmdTemp.StartInfo.UseShellExecute = false;
            cmdTemp.Start();
            cmdTemp.WaitForExit(); // Obligamos a esperar a que CMD termine su trabajo

            // 2. VACIAR PAPELERA Y DNS
            System.Diagnostics.Process psClean = new System.Diagnostics.Process();
            psClean.StartInfo.FileName = "powershell.exe";
            psClean.StartInfo.Arguments = "-NoProfile -Command \"Clear-RecycleBin -Force -ErrorAction SilentlyContinue; ipconfig /flushdns\"";
            psClean.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            psClean.StartInfo.CreateNoWindow = true;
            psClean.StartInfo.UseShellExecute = false;
            psClean.Start();
            psClean.WaitForExit();
        });

        // AVISO DE ÉXITO
        MessageBox.Show("Archivos, carpetas temporales, Papelera y DNS vaciados correctamente.", "PuntoBat V3.0", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        // AUDITORÍA: Si el proceso de limpieza falla, dejamos el rastro del error exacto
        RegistrarLog("ERROR_CRITICO", "Fallo al Limpiar Temporales/Papelera", ex.Message);

        MessageBox.Show("Ocurrió un error inesperado al intentar limpiar el sistema: " + ex.Message, "Error de Ejecución", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

Anatomía de la Automatización

Esta función no es un simple acceso directo; está estructurada para ser segura, auditable y eficiente en un entorno corporativo. Estos son los puntos clave de la arquitectura del botón:

1. Prevención del Usuario

Antes de disparar cualquier proceso destructivo, la interfaz frena al técnico con un MessageBox. ¿La razón? Si un usuario final tiene el navegador o un documento de Office abierto, muchos archivos temporales estarán bloqueados por el sistema y la limpieza será a medias. Esta pausa estratégica asegura un porcentaje de éxito mucho mayor.

2. Rendimiento Asíncrono (await Task.Run)

El peor pecado de una herramienta de soporte es mostrar el mensaje “No responde” en la barra de título mientras trabaja. Al encapsular la carga de trabajo en un hilo secundario (Task.Run), la interfaz de PuntoBat se mantiene completamente fluida y responsiva, incluso si el equipo está borrando gigabytes de información acumulada.

3. Agresividad en CMD y Elegancia en PowerShell

Para la purga de las carpetas %TEMP% y Prefetch, utilizamos cmd.exe con una cadena de comandos unidos por el operador &. Los parámetros /q (modo silencioso), /f (forzar lectura/escritura) y /s (subcarpetas) garantizan una eliminación agresiva sin ventanas emergentes.

Sin embargo, para vaciar la Papelera de Reciclaje, CMD es torpe. Por eso, el código levanta un proceso oculto de powershell.exe y utiliza el cmdlet nativo Clear-RecycleBin, combinado con ipconfig /flushdns. Al agregar -ErrorAction SilentlyContinue, nos aseguramos de que si algún archivo de la papelera está corrupto y no se puede borrar, el script no se detenga por un error irrelevante.

4. Auditoría Implacable

En el soporte corporativo, el rastro lo es todo. A través del método RegistrarLog(), PuntoBat escribe en el disco duro exactamente a qué hora se inició la limpieza y si terminó con éxito o arrojó una excepción. Esta trazabilidad es vital si horas después necesitas revisar qué acciones se tomaron en ese equipo específico.

Transparencia Total El código fuente abierto de PuntoBat V3.0 garantiza que herramientas como esta ejecuten exactamente lo que dicen, sin intermediarios ni cajas negras, utilizando directamente las herramientas de administración que Microsoft ya incluyó en el sistema.

Si quieres auditar el código completo o implementar la herramienta en tu infraestructura, puedes revisar el repositorio oficial en GitHub.

No responses yet

Agregar un comentario

Tu dirección de correo electrónico no será publicada. Los campos requeridos están marcados *