Question

J'ai un projet InstallScript écrit à partir de zéro en 2010. InstallShield Il contient, entre autres, trois objets InstallShield natifs et quatre objets InstallShield Titulaire du module de fusion qui enveloppent fichiers MSM.

Quand je l'ai testé à l'origine du projet, installé bien sur un environnement propre, mais quand j'ai essayé la mise à niveau vers une nouvelle version, chacun des quatre Titulaire module de fusion des objets produits « Erreur 1706. Aucune source valide peut être trouvée pour le produit un message XXXX ».

Je l'ai fait quelques recherches sur le net et a constaté que cela est une erreur Windows Installer, et il se produit parce que le fichier MSI doit exister sur la machine, même après l'installation des médias est parti d'origine. La méthode recommandée pour veiller à ce que doit cocher la case « cache le package .msi localement » case à cocher dans le support module de fusion objet de dialogue de la propriété.

Je coché cette case pour les quatre modules de fusion et re-testé, mais cela n'a pas résolu le problème. Je me suis alors regardé où ces modules de fusion ont été effectivement mis sur le disque dur. La boîte de dialogue de ladite propriété <DISK1TARGET>, qui décide de C:\Program Files\InstallShield Installation Information\ {GUID Produit} lors de l'exécution. En regardant la machine de test, il semblait que les quatre modules de fusion écrivaient au même endroit, les fichiers MSI ainsi d'écraser les uns des autres.

Pour contourner cela, j'edited chaque module de fusion se cache à un chemin unique, <DISK1TARGET>\ {Nom} . Je Compilé et testé à nouveau, et je peux voir que chaque module de fusion ne se fait maintenant enregistrer dans un sous-dossier unique. Cependant, les quatre messages d'erreur 1706 sont toujours apparaissant lorsque je mets à jour.

Est-ce que quelqu'un a des idées? Je suis sûr que je manque quelque chose d'évident, mais il ne semble pas être documenté nulle part. : -)

Mise à jour:

Selon beaucoup de messages sur les forums InstallShield, il semble que InstallShield génère un nouveau GUID de produit pour chaque MSI A chaque fois que embarqué il construit le projet InstallScript. Au cours du processus de mise à jour, le moteur InstallShield remplace chaque fichier MSI mis en cache sur la machine cible avec la nouvelle version, mais quand il vient de les exécuter, Windows Installer dit « hé, c'est un nouveau produit, où est MSI de l'ancien produit pour que je peut le désinstaller? », d'où l'erreur.

Est-il possible de dire InstallShield de ne pas générer de nouveau le GUID du produit pour chaque MSI embarqué sur chaque build? Certes, ce comportement se moque de l'idée d'intégrer des modules de fusion dans des projets InstallScript? : - (

Était-ce utile?

La solution

Je suis ce travail par:

  1. Obtenir des configurations MSI autonomes correspondant aux MSMs que nous avions déjà. Heureusement cela était possible pour tous.
  2. Y compris les lésions musculo-squelettiques en tant que composants installables dans le projet InstallScript, installé dans un emplacement temporaire approprié sur la cible.
  3. En cas de <feature>_Installed concerné, coquille vers msiexec.exe et exécutez le fichier MSI avec les commutateurs /i et /qb.
  4. En cas de <feature>_UnInstalling concerné, coquille vers msiexec.exe et exécutez le fichier MSI avec le commutateur /x.

Cela se sent un peu « mal », mais cela fonctionne très bien, donc je suis heureux de le laisser à que si quelqu'un a une meilleure idée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top