Question

Nous utilisons un modèle d'automatisation d'objet COM pour rendre notre application disponible pour nos clients.

Ils utilisent pour la plupart python pour accéder à notre interface d'application.

Comme nous souhaitons pouvoir installer (pas encore exécuté, c’est un autre problème) différentes versions de l’application, nous modifions nos composants COM pour qu'ils soient sans enregistrement.

Mais cela est en conflit avec l'accès depuis les langages de script via l'automatisation IDispatch car ils ont besoin des entrées du registre.

Notre approche consiste à créer une application qui gère la version active de notre application réelle. Il permet à l'utilisateur de choisir la version qu'il souhaite et prend en charge les entrées de registre.

Quelles sont les alternatives à notre approche?

Était-ce utile?

La solution

Il existe un protocole dans COM pour cela. Si vous versionnez les interfaces (et changez le GUID pour chaque version), vous pouvez installer plusieurs versions. Microsoft le fait avec WORD, etc.

Il est possible de créer une classe Word.Document.5 spécifique à la version 5 de la bibliothèque ou simplement word.Document qui créera une instance du plus haut présent sur la machine. Je ne sais pas si cette fonctionnalité est intégrée à COM ou doit être implémentée, mais cela vaut la peine de s'y intéresser.

Autres conseils

Vous pouvez accéder aux objets COM de Regfree via Microsoft. Objet Windows.ActCtx .

En ce qui concerne l'automatisation IDispatch nécessitant des entrées dans le registre, ce n'est pas tout à fait correct. Je suppose que vous utilisez l'implémentation ATL par défaut, IDispatchImpl. Nous avons résolu cette solution en fournissant notre propre implémentation, IRegFreeDispatchImpl, qui utilisait le API de manipulation de contexte d'activation dans la manière suggéré ici pour envelopper tous les points d'entrée dans la DLL avec une activation / désactivation du contexte d'activation.

Eh bien, la réponse est suggérée par vous-même. Vous pouvez écrire une application qui contient la liste complète de toutes les versions de composants COM. Une fois qu'une version est sélectionnée par l'utilisateur, vous pouvez appeler l'application regsvr32 pour enregistrer cette version.

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