"El Truco del Almendruco" en la depuración con "vsjitdebugger.exe"

En más de una ocasión hemos tenido que depurar de una forma un tanto compleja, o al menos no de la forma habitual, es decir ni depurando directamente desde Visual Studio ni atachando procesos, ¡seguro que si!  Más concretamente, y para el caso que nos ocupa pondré un para de ejemplos muy prácticos.

Durante estas semanas junto con un compañero de trabajo hemos estado realizando Setups “más o menos complejos” y, bueno, así es como uno se da cuenta de los problemas y de como surgen las necesidades, jejeje…

Durante estos Setups las “Customs Acctions”, clases específicas para el tratamiento de acciones durante la instalación/desinstalación, surge la necesidad de depurarlas, y la pregunta es ¿cómo?. Alguno dirá; pues con MessageBox.Show(….), Console.WriteLine(…), etc.. si este mecanismo siempre funciona, pero es bastante más tedioso.

Pues nada de eso, a partir de ahora ¡y claro, para aquel que no conozca este truquito!, será mucho más fácil.

Pasos:

  • Abre el registro de windows: regedit.exe
  • Localiza la ruta “HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionImage File Execution Options
  • Crear una nueva key “MsiExec.exe”
  • Para la Key creada, crear un nuevo valor alfanumérico/String value (REG_SZ) y asígnale el nombre “Debugger”
  • Ahora, asignale el valor “vsjitdebugger.exe”

Debería quedar así:

Esta configuración hará que nuestro depurador; “Visual Studio Just-In-Time Debugger” se inicie cada vez que se ejecute el comando Msiexec.exe

Si ahora sobre nuestro proyecto de Setup de Visual Studio, hacemos “click” con el botón derecho de ratón y pulsamos “Install”,  “Tachaaaaannnnnn” ¡a depurar!, claro, previamente estableceremos los puntos de ruptura (Break Points) adecuados, :-D.

De la misma forma, si queremos instalar un Servicio Windows en la consola de servicios y utilizamos “InstallUtil” repetiremos los pasos sustituyendo MsiExec.exe por “InstallUtil.exe“.

Una vez que hayamos finalizado la depuración, Modificar la key “MsiExed.exe” para que no se ejecute siempre, de manera que quede algo como; ” _***_MsiExec.exe”. De forma similar para InstallUtil.exe, por ejemplo _***_InstallUtil.exe.

Tambíen podríamos sustituir  nuestro depurador “vsjitdebugger.exe” por cualquier otro disponible en nuestra máquina.

 

Por supuesto, gracias a Javier,(si, el de las cervecitas, jejeje…) por tal descubrimiento.

 

¡Buscando la fácil senda en el desarrollo!
Juanlu

4 comentarios en “"El Truco del Almendruco" en la depuración con "vsjitdebugger.exe"”

  1. System.Diagnostics.Debugger.Launch() es otra opción que permite adjuntar el depurador cuando sea necesario. Comentaba en un post (http://geeks.ms/blogs/rcorral/archive/2008/03/08/depurando-servicios-de-windows-m-225-s-facilmente.aspx) hace tiempo como usarlo para depurar servicios, pero también se puede usar en este escenario…

    Además hace un tiempo publique un script de PowerShell que establece las claves del registro que comentas para depurar un servicio (http://geeks.ms/blogs/rcorral/archive/2008/03/12/depurar-servicios-con-ayuda-de-powershell.aspx)… con mínimas modificaciones también serviría para facilitar el trabajo de registrar y desregistrar el depurador de inicio de aplicación en el escenario que comentas.

    Juan Luis, disculpa que me cite tanto a mi mismo, pero me ha parecido que mis dos post complementaban el tuyo a la perfección.

    Un saludo!!!

  2. jejejeje… acabo de ver tus post, y sí, la verdad es que la intención del post de PowerShell es la misma, sólo que como yo digo no tienes que programar nada, jejejeje… ¿mejor no?
    Tomo nota.

    Gracias nuevamente
    Juanlu

  3. el depurador (vsjitdebugger.exe) me esta dando problemas y me cierra el explorer , esto me pasa en algunas carpetas , como puedo solucionas esto..
    saludos y gracias

Deja un comentario

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