2011-01-06 11 views
10

Nuestro producto tiene un instalador MSI (escrito en WiX) que básicamente copia algunos archivos en una carpeta c: \ ourproduct e instala un servicio de Windows "ourwindowsservice".Instalar instancias múltiples de un MSI con nombre de instancia dinámico

Nos gustaría agregar soporte para varias instancias del servicio, y debería ser posible instalarlas/desinstalarlas independientemente una de la otra. Similar p. a SQL Server, cada instancia debe tener un nombre que se pueda pasar al MSI como un parámetro de línea de comando.

Ejemplo: ejemplo "A" => archivos para copiar "c: \ ourproductA", instale el servicio como "ourwindowsserviceA" ejemplo "B" => copiar archivos en "c: \ ourproductB", instale el servicio como " ourwindowsserviceB " ...

¿Alguna idea?

Instance transformation parece requerir un conjunto de instancias predefinidas y nombradas previamente.

Gracias

Respuesta

9

columna de nombre de la tabla ServiceInstall es el tipo de formato. Esto significa que puede usar propiedades en tiempo de ejecución para conducir el nombre.

Hace unos años escribí un artículo de blog sobre instaladores de instancias múltiples. En los comentarios, alguien preguntó sobre un número dinámico de instancias y hablo sobre lo que se debe hacer. Básicamente, tendría que escribir un bootstrapper.exe que tuviera una IU y podría impulsar la creación de transformadas con propiedades únicas. Usar C# y WiX/DTF para su Interoperabilidad de MSI es bastante posible. Simplemente nunca sentí la necesidad de hacerlo realmente. He sido perfectamente feliz con Producto, Producto-1 ... Producto-15 y listo. Los métodos abreviados deben realizarse mediante una acción personalizada porque no son compatibles con el tipo de formato, pero INSTALLDIR se puede modificar y ServiceNames admite el formato.

+0

Gracias, Christopher! ¿Tu artículo de blog todavía está en línea por casualidad? – Max

+0

http://blog.deploymentengineering.com/2006/10/multiple-instance-msis-and.html y http://blog.deploymentengineering.com/2008/03/installshield-2009-beta-part-i.html –

+0

+1 a la respuesta de Chris. Por cierto, yo fui uno de los que hicieron preguntas sobre varias instancias en los comentarios de la publicación del blog mencionado. :) Gracias de nuevo, Chris, ¡eso me ayudó mucho! Más tarde compartí mi propia experiencia en esta área aquí: http://ysdevlog.blogspot.com/2008/12/multiple-instance-installations-and.html. Si también piensa en actualizaciones a través de parches, le resultará interesante leerlos hasta el final y prestar especial atención al enlace que comparto en el último comentario. ¡Buena suerte! –

2

Lamentablemente, el artículo que mencionó es correcto, Windows Installer no admite instancias dinámicas. Incluso las herramientas comerciales que admiten instancias múltiples requieren definir las instancias desde el principio. Entonces, en su caso, necesitaría definir las instancias A, B, C, etc., manualmente antes de generar el instalador.

Esto se debe a que un producto está identificado por su ProductCode (entre otras cosas), por lo que debe aplicar una transformación a su MSI que cambie la identidad. Es bastante difícil generar transformaciones sobre la marcha porque necesita herramientas especiales o la API de Windows Installer que generalmente no se encuentra en una máquina de usuario.

Sin embargo, como mencionó Christopher, puede intentar simular una instancia dinámica utilizando las propiedades del instalador. Estas propiedades se pueden establecer a través de la interfaz de usuario de instalación o mediante un bootstrapper personalizado.

Cuestiones relacionadas