2010-07-13 10 views
0

J'ai créé un package d'installation WiX pour un programme volumineux. Le package d'installation inclut les modules de fusion pour les fichiers Visual C++ 9.0. J'ai besoin d'inclure les modules de fusion pour une DLL COM. L'installation fonctionne très bien. La première fois que je lance le programme, il se passe quelque chose d'étrange. La première fois que la DLL COM est appelée, le mécanisme d'installation Windows démarre. Une boîte de dialogue d'installation apparaît à l'improviste. Il fait tout ce qu'il doit faire pendant un petit moment, puis il disparaît et le programme reprend sa fonction normale. Cela ne se produit que la toute première fois que la DLL COM a besoin des modules de fusion Visual C++ et une fois l'installation terminée, le programme continue à fonctionner sans incident. Pourquoi cela se produit-il, et que puis-je faire pour l'empêcher? Voici le code WiX pour les modules de fusion:La boîte de dialogue d'installation bizarre s'affiche après l'exécution de l'installation WiX

<DirectoryRef Id="TARGETDIR"> 
    <Merge Id="VCRedistCRT" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_CRT_x86.msm" DiskId="1" Language="0"/> 
    <Merge Id="VCRedistATL" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_ATL_x86.msm" DiskId="1" Language="0"/> 
    <Merge Id="VCRedistMFC" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_MFC_x86.msm" DiskId="1" Language="0"/> 
    <Merge Id="VCRedistMFCLOC" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_MFCLOC_x86.msm" DiskId="1" Language="0"/> 
    <Merge Id="VCRedistOpenMP" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_OpenMP_x86.msm" DiskId="1" Language="0"/> 
</DirectoryRef> 

<Feature Id="VCRedistCRT" Title="Visual C++ 9.0 CRT Runtime" AllowAdvertise="no" Display="hidden" Level="1"> 
    <MergeRef Id="VCRedistCRT"/> 
</Feature> 
<Feature Id="VCRedistATL" Title="Visual C++ 9.0 ATL Runtime" AllowAdvertise="no" Display="hidden" Level="1"> 
    <MergeRef Id="VCRedistATL"/> 
</Feature> 
<Feature Id="VCRedistMFC" Title="Visual C++ 9.0 MFC Runtime" AllowAdvertise="no" Display="hidden" Level="1"> 
    <MergeRef Id="VCRedistMFC"/> 
</Feature> 
<Feature Id="VCRedistMFCLOC" Title="Visual C++ 9.0 MFC LOC Runtime" AllowAdvertise="no" Display="hidden" Level="1"> 
    <MergeRef Id="VCRedistMFCLOC"/> 
</Feature> 
<Feature Id="VCRedistOpenMP" Title="Visual C++ 9.0 Open MP Runtime" AllowAdvertise="no" Display="hidden" Level="1"> 
    <MergeRef Id="VCRedistOpenMP"/> 
</Feature> 

Si je devais deviner, il semble que les bibliothèques Visual C++ sont en cours d'installation « à la première utilisation; » c'est-à-dire que la fonctionnalité n'est pas complètement installée jusqu'à ce que quelqu'un l'utilise. Je pense que ce serait impossible car la valeur AllowAdvertise est définie sur "non", mais je ne suis pas un expert WiX.

Répondre

0

Merci pour les réponses. L'astuce pour vérifier l'observateur d'événement était la pièce magique. Apparemment, il y avait une entrée pour un fichier d'installation qui commençait par un espace. Pour quelque raison que ce soit, le compilateur WiX l'a autorisé, et le programme d'installation l'a installé, mais lorsque le composant COM a démarré pour la première fois, quelque chose dans le système ou l'installateur a décidé que ce n'était pas kasher. Ce fichier particulier était complètement indépendant de l'enregistrement COM. Lorsque j'ai supprimé l'espace au début du nom du fichier, le problème a disparu. Je vais suivre les conseils de M. Mensching et retirer la publicité du dossier. J'utilisais du code généré par l'un des outils WiX (je ne me souviens plus lequel), et pour une raison quelconque, il a choisi de marquer advertise = "yes" sur les composants COM. Je ne veux certainement pas que le programme d'installation essaie de faire une sorte d'installation au moment de l'exécution sur ces composants COM.

0

Vous devez également installer les modules de fusion politique:

C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_ATL_x86.msm 
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_CRT_x86.msm 
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_MFC_x86.msm 
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_MFCLOC_x86.msm 

Je ne sais pas si cela va résoudre le problème bien, mais ce sont certainement manquer autrement.

+0

Merci pour le conseil. Malheureusement, cela n'a pas résolu mon problème avec la boîte de dialogue d'installation apparaissant. –

2

Il semble bien que vous ayez annoncé un enregistrement COM. Je recommande fortement de ne pas faire de publicité: http://robmensching.com/blog/archive/2007/03/12/RobMens-Recommendation-Do-not-advertise-COM-information-in-MSI.aspx. Tout d'abord, vérifiez votre code source pour quoi que ce soit avec Advertise = "yes". Si ce n'est pas évident, le journal des événements sur la machine aura un événement Windows Installer qui pointera sur le composant qui a nécessité la réparation/installation sur demande. Cela devrait grandement réduire la recherche.