2009-03-31 24 views
5

Tengo un dll compartido, lo llamaremos Utility.dll que está instalado por varios productos. En mi archivo WIX instalo Utility.dll como un componente separado. Ahora la versión 2.0 de Utility.dll hace referencia a un dll adicional, UtilityUtility.dll, que deberá instalarse junto con.WIX agregar nuevo archivo al componente compartido

Para mi primer intento integrando UtilityUtility.dll, creé un nuevo componente WIX que contiene el nuevo dll.

Esto causa problemas en el siguiente escenario

1) usuario instala Producto 1 {utility.dll 1,0}
2) El usuario instala Producto 2 {utility.dll 2,0, UtilityUtility.dll 2,0}
3) Producto usuario desinstala 2 {} 2.0 utility.dll

Ahora, cuando un usuario utiliza el utility.dll se producirá un error cuando no puede encontrar la referencia UtilityUtility.dll

Esto me llevó a añadir a UtilityUtility.dll el componente original que evita Ut ilityUtility.dll se eliminará en el escenario anterior pero viene con su propio problema.

1) usuario instala Producto 1 {utility.dll 1,0}
2) El usuario instala Producto 2 {utility.dll 2,0, UtilityUtility.dll 2,0}
3) El usuario desinstala Producto 2 {utility.dll 2,0, UtilityUtility .dll 2,0}
4) el usuario desinstala Producto 1 {UtilityUtility.dll 2,0}

UtilityUtility.dll está huérfano ya que no se eliminan por la desinstalación del producto 1 (no existiera en el componente cuando fue originalmente instalado).

¿Tengo alguna otra opción aquí?

Gracias

Respuesta

3

A menos que pueda actualizar el Producto 1 (que supongo que no es completamente posible), creo que está jodido. En mi humilde opinión, las Reglas de componentes son lo peor del instalador de Windows. Esto link to an old blog post of mine resume la mayor parte. Su caso es un poco diferente de lo que se describe allí, pero se esperan los resultados.

Creo que puedes elegir el menor de dos males.

+0

Con el primer escenario, ¿sería una reinstalación/reparación de Product1 después del unistall de Product2 utilizando REINSTALLMODE = a (o amus) reparar la situación? Tengo un proyecto de prueba similar y parece que la reparación reemplaza la DLL v2 con la v1 –

+0

Sí, reparar Product1 con REINSTALLMODE = a forzaría todos los archivos en ese paquete en la máquina, lo que podría romper cualquier otro archivo compartido. "a" es un martillo muy brutal para columpiarse. –

+3

La publicación a la que se refiere Rob sobre Component Rules se ha mudado, creo, a http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101 – adamjcooper

0

¿Puede reproducir el segundo problema? En teoría, después de instalar el Producto 2, la versión del componente se convierte en 2.0. Después del paso 3, la versión del componente sigue siendo 2.0. Cuando el usuario desinstala el producto 1 en el paso 4, Windows Installer sabe cómo eliminar Utility.dll 2.0 y UtilityUtility.dll 2.0.

Actualización: Estaba equivocado, lo siento.

+0

@Pavel no existe la "versión del componente" en Windows Installer. El comportamiento descrito arriba es lo que esperaría. –

+0

Tengo una repro. – user38309

1

No estoy 100% seguro ... pero creo que agregar el segundo .DLL al componente original probablemente sea una "violación" de las reglas del componente. Eche un vistazo a: http://blogs.msdn.com/robmen/archive/2003/10/18/56497.aspx

Según lo que he deducido de la multitud de Wix, la mejor "práctica" es tener cada archivo como un componente individual.

¿Cuáles son sus planes para las actualizaciones (en términos msi: mayor, menor, parche)? Si no recuerdo mal, las actualizaciones menores no pueden ensuciar con las definiciones de los componentes. No tengo idea de parches.

Es posible que también quiera preocuparse por la reparación.

+0

Me encantaría tener el segundo dll en su propio componente, pero necesito evitar que se elimine en el primer escenario, paso 3. Planeo hacer grandes actualizaciones. – user38309

+0

@summergoat: Creo que puede que no tengas suerte entonces (mira el comentario de Rob Menshing). Es posible que desee preguntar en la lista de correo de wix ... tienden a ser útiles y profundamente conocedores del instalador de Windows (esta no es realmente una pregunta de wix ... sino una pregunta de instalador de Windows). – user53794

0

Me he encontrado con este problema yo mismo. Estoy de acuerdo con @rbobby y, además, afirmo que el hecho de que pueda imaginarse este escenario de usuario roto es una prueba de que está violando las reglas. Solo debe actualizar un componente compartido si es total y completamente compatible. Si Duck 2.0 no grazna o nada, invente un nuevo nombre para él.

En su caso, tiene Utility.dll 1.0 y Utility.dll 2.0, pero son solo el "mismo componente" en que hacen cosas similares de una manera diferente. Utility.dll 2.0 realmente debería llamarse UtilityPlus.dll 1.0.

Lo siento, sé que probablemente no sea la respuesta que quería escuchar, pero el caso de ingeniería es claro.

Cuestiones relacionadas