Compartir a través de


Depuración de acciones personalizadas

Puede depurar acciones personalizadas basadas en bibliotecas de vínculos dinámicos mediante las herramientas de depuración para Windows. No es posible usar la depuración dinámica con acciones personalizadas basadas en archivos ejecutables o scripts.

Las técnicas descritas en esta sección pueden ayudarle a depurar las acciones personalizadas de Windows Installer. Consulte la sección Herramientas de desarrollo de controladores del kit de controladores de Windows (WDK) para obtener información sobre las herramientas de depuración para Windows.

Windows Installer usa la variable de entorno MsiBreak para determinar qué acción personalizada se va a depurar. Si tiene acceso al código fuente de la acción personalizada, puede usar la depuración sin MsiBreak. Para iniciar la depuración sin MsiBreak, coloque un cuadro de mensaje provisional al principio del código de la acción. Cuando aparezca el cuadro de mensaje durante la instalación, adjunte el depurador al proceso que posee el cuadro de mensaje. A continuación, puede establecer los puntos de interrupción necesarios y descartar el cuadro de mensaje para reanudar la ejecución. Este método no puede depurar las partes anteriores de la acción personalizada.

Para usar la variable de entorno MsiBreak para depurar la acción personalizada, establezca MsiBreak en el nombre de la acción personalizada en la tabla CustomAction. MsiBreak puede ser un sistema o una variable de entorno de usuario. Si la variable se establece como una variable del sistema, es posible que se necesite un reinicio del sistema cuando se cambie el valor para detectar el nuevo valor.

Para usar la variable de entorno MsiBreak para depurar una interfaz de usuario incrustada, establezca el valor de MsiBreak en MsiEmbeddedUI.

Windows Installer solo comprueba la variable de entorno MsiBreak si la persona usuaria es un administrador. El instalador omite el valor de MsiBreak si la persona usuaria no es un administrador, aunque se trata de una aplicación administrada.

Si está depurando una acción personalizada que se ejecuta con privilegios elevados (de sistema) en la secuencia de ejecución, adjunte el depurador al servicio de Windows Installer. Al depurar una acción personalizada que se ejecuta con privilegios suplantados en la secuencia de ejecución, el sistema pide confirmación con un cuadro de diálogo que indica qué proceso se debe depurar. Se pide confirmación a la persona usuaria con un cuadro de diálogo que indica qué proceso se va a depurar. Para obtener más información sobre las acciones personalizadas con privilegios elevados, consulte Seguridad de acciones personalizadas.

Una vez que el depurador se ha asociado al proceso correcto, el instalador desencadena un punto de interrupción del depurador inmediatamente antes de llamar al punto de entrada del archivo DLL. En el punto de interrupción, el archivo DLL ya se carga en el proceso y la dirección del punto de entrada determinada. Si no se pudo cargar el archivo DLL de acción personalizada o el punto de entrada de acción personalizada no existía, no se desencadena ningún punto de interrupción. Dado que el punto de interrupción se desencadena antes de llamar a la función DLL, una vez que desencadenado el punto de interrupción debería usar el depurador para avanzar hasta que se llame al punto de entrada de la acción personalizada. Como alternativa, puede establecer un punto de interrupción en cualquier lugar de la acción personalizada y reanudar la ejecución normal.

Windows Installer ejecuta archivos DLL no almacenados en la tabla Binary directamente desde la ubicación del DLL. El instalador no conoce el nombre original de un archivo DLL almacenado en la tabla Binary y ejecuta la acción personalizada del DLL con un nombre de archivo temporal. La forma del nombre de archivo temporal es MSI?????. TMP. En Windows XP, este archivo temporal se almacena en una ubicación segura, normalmente <WindowFolder>\Installer.

Tenga en cuenta que muchos archivos DLL creados para la depuración contienen el nombre y la ruta de acceso del archivo PDB correspondiente como parte del propio archivo DLL. Al depurar este tipo de archivo DLL en un sistema donde se puede encontrar el archivo PDB en la ubicación almacenada en el DLL, la herramienta del depurador puede cargar automáticamente los símbolos. En situaciones en las que no se encuentra el archivo PDB en la ubicación almacenada, el depurador no admite la carga de símbolos desde la ubicación almacenada, o el archivo DLL no se creó con información de depuración, es posible que tenga que colocar los archivos de símbolos en la carpeta con el archivo DLL temporal.

El instalador agrega información de depuración para scripts de acción personalizados al archivo de registro de instalación.

There is a problem with this Windows Installer package. A script 
required for this install to complete could not be run. Contact your 
support personnel or package vendor.  {Custom action [2] script error 
[3], [4]: [5] Line [6], Column [7], [8] }