2008-10-17 10 views
6

Je suis un gestionnaire d'applications qui essaie de comprendre le lien entre les clés de registre COM (SelfReg) et le fichier .dll indiqué dans Windows.Fonctionnement de l'enregistrement COM sous Windows

ProgID, AppID, TypeLibs, Extensions & Les verbes sont tous liés autour du droit CLSID? Est-ce que les CLSID utilisent toujours des ID Prog/App ou pourriez-vous simplement avoir une classe d'extension de fichier? Quels bits sont optionnels?

Certains d'entre eux semblent être «comme un routeur» où il y a les deux interfaces (interne - .dll) et externe (l'extension, etc.).

Comment tout cela s'adapte-t-il? (La documentation du SDK n'a pas de sens pour moi)

Je pose la question car tout cela est crucial pour la 'guérison' de l'application avec Windows Installer (les packagés sont tous 'gros', mais il n'y a pas de pannes sérieuses depuis sa Suis-je en sécurité en supposant que pour ce que COM est enregistré, il doit tout relier au CLSID et ne peut pas être une 'impasse'? extensions ont besoin Verbs qui ont besoin d'années ProgId ...

Qu'en est-il du AppId de, TypeLibs et interfaces? Comment interagissent-ils?

+0

Je ne suis pas surpris que cela dépende totalement de ce que la DLL "fait", je suppose que je savais qu'il n'y aurait pas de règles à ce sujet. –

Répondre

4

La première chose à réaliser est que les DLL COM s'enregistrent elles-mêmes. Ils mettront toutes les entrées requises dans les endroits appropriés dans le registre.

Je pense que la réponse à votre question centrale sur les bits optionnels est probablement qu'ils sont tous facultatifs pour différents types d'objets. Les objets d'automatisation requièrent Prog/AppID s'ils sont créables publiquement, mais ils ne le sont pas s'ils sont créés uniquement en interne. De même, une classe COM non publiquement créable peut être répertoriée.

De nombreux objets COM qui ne disposent pas d'interfaces d'automatisation (comme la plupart des classes COM utilise Microsoft en interne dans les fenêtres n'aura pas d'ProgId mais tout simplement une entrée sous leur CLSID dans HKCR \ CLSID.

Si Je vous comprends bien, vous êtes intéressé par ce du point de vue de l'installateur. Je suppose que tout ce que vous devez faire est de demander à l'utilisateur de spécifier quels sont dll selfregistering puis appelez

regsvr32 dllname.dll

ou

exename.exe/Regserver

pour une rupture de serveur de processus. Si quelque chose ne va pas, il suffit d'appeler les opposés.

regsvr32/u dllname.dll

ou

exename.exe/UNREGSERVER

J'espère que cela répond à votre question.

1

Je vous recommande le livre Inside COM.

Ce n'était pas la référence la plus à jour, même pendant l'âge d'or COM, mais il explique assez bien les bases, , y compris tout le registre goo. De plus, je parie que vous pouvez obtenir une copie utilisée vraiment bon marché.

Je sais que ce n'est pas une réponse, mais se rappelant ce que le chapitre sur le registre ressemblais - une question non spécifique « comment ça marche », il faudra vraiment, vraiment longue réponse ...

0

J'ai utilisé une réponse car les commentaires semblent si limités. Je ne sais pas comment il en va interpréter cela (? Peut-être que je vais être considérée comme folle pour parler à moi-même)

« Comment ça marche » question, il faudra vraiment, très longue réponse

Merci - Ce que j'essaie d'obtenir, c'est de comprendre cela sans être réellement un développeur - c'est à cause de la façon dont les packageurs tentent de regrouper les clés de registre COM avec le fichier .dll (dans le même composant) pour que la résilience fonctionne.

Cela signifie «piéger» le COM de l'enregistrement du fichier .dll et l'associer dans les bonnes tables publicitaires (CLSID, AppID ... et nauseum) au composant qui contient le fichier .dll. Parfois, ce n'est pas facile à voir et parfois (on me dit) il peut briser l'application de fonctionner. On me dit que le COM n'a pas besoin de pour être complet (autoréférentiel). J'essaie toujours de comprendre tout ce que je veux dire. Bien sûr, si le conditionneur capture toutes les informations mais n'associe pas les informations COM au fichier .dll, les regkeys sont toujours écrites au moment de l'installation, mais le MSI n'installe pas l'application si les choses tournent mal (ce qui est presque jamais)