2009-10-26 2 views
1

Notre produit contient un serveur COM in-proc VC++ ATL avec deux classes exposées COM - ClassA et ClassB. Ce serveur COM est ajouté dans un package d'installation Install Shield 2008 et la propriété "COM Extract at Build" est définie pour le composant.Comment fonctionne Install Shield "COM Extract at Build"?

ClassA et ClassB sont exposés exactement de la même manière par le composant - il y a un fichier .rgs pour chacun, les deux fichiers .rgs sont compilés dans les ressources du composant et CAtlModule :: UpdateRegistryFromResourceS() est appelé pour les deux.

Toutefois, lorsque nous exécutons regsvr32 sur le serveur COM, les deux classes sont correctement exposées au registre, mais lorsque nous exécutons l'installation du package, seul l'un d'entre eux est exposé par Install Shield.

Comment Install Shield détecte-t-il les modifications qu'il doit apporter au registre? Que devrions-nous vérifier pour détecter la source du problème?

Répondre

2

Je soupçonne qu'ils utilisent RegOverridePredefKey (au moins MSDN astuces qu'ils devraient): http://msdn.microsoft.com/en-us/library/ms724901(VS.85).aspx

Après les clés cibles ont été substituée à un emplacement privé, InstallShield peut analyser la structure de registre et de générer un script pour elle. Tout cela est conjecture, cependant, je ne sais pas ce que fait réellement InstallShield, mais je pense que je commencerais par RegMon alors que la construction d'InstallShield fonctionne, pour voir si je pouvais discerner où vont les enregistrements, puis essayer de repérer ce qu'il fait mal.

1

Si vous voulez une explication détaillée (ou autant qu'il est autorisé à donner), vous voulez aller sur le forum de la communauté InstallShield et poser une question pour MichalU, employé d'InstallShield. Si vous voulez savoir en général comment ces choses fonctionnent, vous pouvez regarder le code source de WiX car Heat a la capacité d'extraire des informations com.

Si l'extrait COM à la construction vous donne des problèmes vous pouvez l'éteindre et insérer les données COM statiquement.

Questions connexes