Cómo deshabilitar una CustomAction específica para una versión previamente instalada durante una instalación de actualización con la base de datos MSI.
Tengo un paquete cuyas versiones instaladas previamente contienen una serie de acciones personalizadas mal diseñadas: hacen cosas que se pueden hacer directamente. Por lo tanto, las estoy eliminando para las futuras versiones.
Una serie de errores es causada por una condición para esas acciones personalizadas: todas se ejecutan por segunda vez durante una etapa de desinstalación durante una actualización. Para evitar este comportamiento indeseable, me gustaría proporcionar una Acción Personalizada que modifique la base de datos de una aplicación instalada previamente, si se detecta una.
Dado un nombre de aplicación, versión y nombre de acción personalizada, ¿cómo puedo desactivarlo para una etapa de desinstalación durante una acción personalizada en una actualización?
Mi intento de modificar la condición de la Acción Personalizada falló cuando ejecuto mi código dentro de una Acción Personalizada en C++ durante una instalación de actualización: enlace de StackOverflow.
Básicamente, estoy usando MsiOpenDatabaseW
para modificar la base de datos msi en caché. Funciona cuando se ejecuta en un ejecutable independiente, pero causa una violación de acceso dentro de una Acción Personalizada.
davy.ai
Para desactivar una acción personalizada durante un paso de desinstalación durante una actualización, puedes seguir los siguientes pasos:
MsiOpenDatabase
.CustomAction
para encontrar la entrada de la acción personalizada que deseas desactivar.Type
a0
, lo cual significa que la acción personalizada está desactivada para la desinstalación.MsiDatabaseCommit
.Sin embargo, como se mencionó en la pregunta, el intento de modificar la base de datos MSI en caché utilizando
MsiOpenDatabase
en una acción personalizada de C++ durante una instalación de actualización resultó en una violación de acceso. Es posible que se requiera una investigación adicional para determinar la causa raíz del problema.