Pregunta

Tengo un proyecto InstallScript escrito desde cero en InstallShield 2010. Contiene, entre otras cosas, tres objetos InstallShield nativas y cuatro objetos Holder módulo de combinación de InstallShield que se envuelven los archivos MSM.

Cuando originalmente probado el proyecto, se instala bien en un ambiente limpio, pero cuando traté de actualización a una nueva versión, cada uno de los cuatro Combinar titular Módulo objetos producidos un "Error 1706. No fuente válida se puede encontrar para el producto XXXX" mensaje.

Hice algo de investigación en la red y encontré que esto es un error de Windows Installer, y ocurre porque el archivo MSI tiene que existir en la máquina incluso después de que el medio de instalación original se ha ido. La forma recomendada para asegurar que se va a marcar la casilla "caché del paquete MSI localmente" en la casilla de diálogo de propiedad del titular de objetos de módulo de combinación.

Me marcó esa caja para los cuatro módulos de combinación y de nuevo a prueba, pero eso no resuelve el problema. Entonces miré en estos módulos de combinación en realidad se están poniendo en el disco duro. dijo que el diálogo de propiedades <DISK1TARGET>, que resuelve C:\Program Files\InstallShield Installation Information\ {producto GUID} en tiempo de ejecución. En cuanto a la máquina de prueba, parecía como si los cuatro módulos de combinación estaban escribiendo al mismo lugar, de ese modo sobrescribir archivos MSI de cada uno.

Para recibir todo el año que edité cada módulo de combinación para almacenar en caché en sí a un único camino, <DISK1TARGET>\ {Nombre} . He compilado y probado de nuevo, y puedo ver que cada módulo de combinación hace ahora de hecho salvarse a una subcarpeta única. Sin embargo, los cuatro mensajes de error 1706 son Todavía que aparece al actualizar.

¿Alguien tiene alguna idea? Estoy seguro de que me estoy perdiendo algo obvio, pero no parece ser documentado en ninguna parte. : -)

ACTUALIZACIÓN:

De acuerdo con un montón de mensajes en los foros de InstallShield, parece que InstallShield genera un nuevo GUID para cada producto MSI incrustado cada vez que se genera el proyecto InstallScript. Durante el proceso de actualización, el motor de InstallShield sobrescribe cada archivo MSI en caché en el equipo de destino con la versión más reciente, pero cuando se trata de ejecutarlos, Windows Installer dice "bueno, esto es un nuevo producto, ¿dónde está MSI del producto antiguo para que yo puede desinstalarlo?", de ahí el error.

¿Es posible decir InstallShield para no volver a generar el GUID del producto para cada incrustado MSI en cada generación? Sin duda, este comportamiento se burla de la idea de la incorporación de módulos de combinación en proyectos InstallScript? : - (

¿Fue útil?

Solución

Tengo este trabajo por:

  1. La obtención de configuraciones independientes MSI correspondientes a los HSH que ya teníamos. Afortunadamente esto era posible para todos ellos.
  2. La inclusión de la MSI como componentes instalables en el proyecto InstallScript, instalados en una ubicación temporal adecuada en el objetivo.
  3. En el caso <feature>_Installed relevante, un shell de msiexec.exe y ejecute el archivo MSI con los interruptores /i y /qb.
  4. En el caso <feature>_UnInstalling relevante, un shell de msiexec.exe y ejecute el archivo MSI con el interruptor /x.

Esto se siente un "mal" poco, pero funciona muy bien, así que estoy feliz de dejar las cosas así no ser que alguien tiene una idea mejor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top