es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para desactivar una acción personalizada durante un paso de desinstalación durante una actualización, puedes seguir los siguientes pasos:

    1. Recupera la base de datos MSI en caché utilizando la función MsiOpenDatabase.
    2. Consulta la tabla CustomAction para encontrar la entrada de la acción personalizada que deseas desactivar.
    3. Si la entrada existe, actualiza su campo Type a 0, lo cual significa que la acción personalizada está desactivada para la desinstalación.
    4. Guarda los cambios utilizando la funció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.

Comments are closed.