Opciones de programación de ejecución de acciones personalizadas

Dado que una acción personalizada se puede programar en la interfaz de usuario y en las tablas de secuencia de ejecución, y se puede ejecutar en el proceso de servicio o de cliente, una acción personalizada puede ejecutarse varias veces.

Tenga en cuenta que el instalador:

  • Ejecuta acciones inmediatamente en una tabla de secuencia de manera predeterminada.
  • No ejecuta una acción si el campo de expresión condicional de la tabla de secuencia se evalúa como False.
  • Procesa la tabla de secuencia de interfaz de usuario en el proceso de cliente si el nivel de la interfaz de usuario interna está establecido en el modo de UI completo (consulte MsiSetInternalUI para obtener una descripción de los niveles de interfaz de usuario).
  • Es un servicio registrado de manera predeterminada cuando se usa Windows 2000 y, en este caso, la tabla de secuencia de ejecución se procesa en el servicio del instalador.

Puede usar las siguientes marcas de opción para controlar la ejecución inmediata de varias acciones personalizadas. Para establecer una opción, agregue el valor de esta tabla al valor del campo Type de la tabla CustomAction. Ninguna de las marcas siguientes se debe usar con acciones personalizadas de ejecución diferida.

(default)

Hexadecimal: 0x00000000

Decimal: 0

Ejecute siempre. La acción se puede ejecutar dos veces si está presente en ambas tablas de secuencia.

msidbCustomActionTypeFirstSequence

Hexadecimal: 0x00000100

Decimal: 256

Se ejecuta una sola vez si está presente en ambas tablas de secuencia. Siempre omite la acción en la secuencia de ejecución si se ha ejecutado la secuencia de la interfaz de usuario. No hay ningún efecto en la secuencia de la interfaz de usuario. No es obligatorio que la acción esté presente o se ejecute en la secuencia de interfaz de usuario que se omitirá en la secuencia de ejecución. No se ve afectado por el registro del servicio de instalación.

msidbCustomActionTypeOncePerProcess

Hexadecimal: 0x00000200

Decimal: 512

Se ejecuta una vez por proceso si se encuentra en ambas tablas de secuencia. Omite la acción en la secuencia de ejecución si la secuencia de interfaz de usuario se ha ejecutado en el mismo proceso, por ejemplo, ambas se ejecutan en el proceso de cliente. Se usa para evitar que las acciones que modifican el estado de sesión, como los datos de la propiedad y de la base de datos, se ejecuten dos veces.

msidbCustomActionTypeClientRepeat

Hexadecimal: 0x00000300

Decimal: 768

Ejecute solo si se ejecuta en el cliente después de que se haya ejecutado la secuencia de la interfaz de usuario. La acción solo se ejecuta si la secuencia de ejecución se ejecuta en el cliente después de la secuencia de interfaz de usuario. Se puede usar para proporcionar lógica, o para suprimir el procesamiento relacionado con la interfaz de usuario si ya se ha realizado para la sesión de cliente.

Tenga en cuenta que para ejecutar una acción personalizada durante dos modos de ejecución diferentes, debe crear dos entradas en la tabla CustomAction. Por ejemplo, para tener una acción personalizada que llame a una biblioteca de vínculos dinámicos (DLL) de C/C++ (Tipo de acción personalizada 1) cuando el modo es MSIRUNMODE_SCHEDULED y MSIRUNMODE_ROLLBACK, ponga dos entradas en la tabla CustomAction que llamen al mismo archivo DLL pero que tengan tipos numéricos diferentes. Incluya código que llame a MsiGetMode para determinar cuándo ejecutar la acción personalizada.

Referencia de acción personalizada

Acerca de las acciones personalizadas

Uso de acciones personalizadas