2011-02-25 16 views
5

En mi proyecto de WiX tengo un archivo de datos y un script SQL que crea db, crea/altera tablas inserta/actualiza filas, etc. Todos los scripts se dividen en tres partes y se ejecutan mediante el elemento SqlScript. Yo uso ContinueOnError="no" pero si el script anterior se ejecutó con éxito, no se revierte. ¿Puedo envolver todos los scripts en la transacción y usar los bloques try/catch? ¿Existe la posibilidad de manejar el evento catch de WiZ? ¿Qué puede aconsejar para hacer ese tipo de instalador?WiX: ¿cómo se puede actualizar el db?

Respuesta

4

No utilizamos la extensión Wix SQL, ejecutamos acciones personalizadas para hacer el trabajo que necesitamos.

En la instalación, utilizamos acciones personalizadas para hacer una copia de seguridad de la base de datos, ejecutar los scripts de actualización correctos (según la versión de la base de datos actual) y restaurar la base de datos a la copia de seguridad como acción de reversión de la actualización.

En la desinstalación, hacemos una copia de seguridad de la base de datos, la eliminamos (condicionalmente según la entrada del usuario) y la restauramos si algo sale mal durante la desinstalación.

+2

¿Qué hace cuando la base de datos es de 100 GB y no se puede hacer una copia de seguridad? –

1

Wix no maneja las secuencias de comandos SQL de esa manera.

Creo que sus opciones son bastante limitadas.

  1. Cree una copia de seguridad de la base de datos antes de la instalación y restaurela en caso de fallo de instalación. A menos que sepa con certeza que el tamaño de los datos siempre será pequeño, probablemente no sea una parte automática del instalador.

  2. Proporcionan scripts rollback sql para secuenciar y ejecutar en caso de fallo de instalación. Esto puede ser un verdadero dolor en el culo para ser correcto dependiendo de los tipos de cambios de DB que necesite.

Offhand No conozco ningún kit de herramientas de instalador que intente automatizar las reversiones de bases de datos como parte de una instalación más grande. Hay demasiadas variables para tener en cuenta. (por ejemplo, cuánto tarda el resto de la instalación no DB y el efecto que podría tener en el tiempo de espera de conexión de la base de datos)

Cuestiones relacionadas