Question

Est-il possible d’utiliser un ocx (contrôle ActiveX) sur un winform (en l’ajoutant probablement par programme) sans avoir au préalable ocx enregistré avec regsrv32?

Ce que je cherche à faire, c’est d’activer l’installation de xcopy. J'ai eu le "AxInterop. .dll" et "Interop. .dll" fichier généré à partir de ma machine dev.

J'ai vu la possibilité d'appeler une dll COM sans l'enregistrer au préalable ( ProSysLib , selon l'auteur, mais je ne l'ai pas encore testé), car ocx est également basé sur COM, donc je suppose que il doit y avoir un moyen de le faire aussi.

Était-ce utile?

La solution

Oui, cela peut être fait. Vous devez supposer que votre application ne sera déployée que sous Windows XP (ou Windows Server 2003) ou une version ultérieure. Vous pourrez ensuite utiliser ce que l'on appelle "COM sans enregistrement" pour que cela se produise.

En gros, vous créez un fichier manifeste pour la DLL de contrôle ActiveX afin que le chargeur Windows & amp; Les DLL COM connaissent son enregistrement sans avoir à le mettre dans le registre.

Cet article sur MSDN décrit en quelques mots la procédure à suivre: Activation sans enregistrement des composants COM: une procédure pas à pas

"Étape 6" et " Etape 7 " dans cet article contient tout vous aurez besoin.

Je viens d’essayer ceci avec l’un de mes propres programmes C # qui utilise un contrôle de grille Microsoft ActiveX (l’ancien "MS Flex Grid") et cela fonctionne très bien. Assurez-vous de créer un fichier manifeste pour votre application et la DLL COM et remplacez les GUID appropriés aux bons endroits. Vous devrez peut-être utiliser OLEVIEW pour identifier les ID appropriés à utiliser dans la DLL ActiveX si vous ne les avez pas à portée de main.

Autres conseils

Sachez qu'apparemment, l'utilisation de composants COM pour COM exempts de registre et créés dans .NET peut provoquer de façon aléatoire des plantages sous Windows XP!

Liens: question Stackoverflow où J'ai appris cela à la article de la base de connaissances Microsoft auquel il est fait référence dans cette question. Il existe un correctif, mais vous n'êtes pas autorisé à le redistribuer.

C’est encore plus simple dans Visual Studio: allez simplement dans Références, trouvez les positions créées par votre ocx (il devrait y en avoir 2, AxSomething et Something) et définissez-les sur Isolated: true dans leurs propriétés. Pas de manifeste, pas de code. Vous devriez maintenant distribuer votre fichier exe avec un fichier dll contenant ocx. L'ocx peut être enregistré sur votre machine de développement.

Après 10 heures de recherche sur l’exécution de l’application VB6 avec OCX sur Win7 sans l’enregistrer ni sur les droits d’administrateur, j’ai trouvé quelques solutions de clic ici: http://mmm4vb6.atom5.com/yes-update-0-12-5479.html#c

Besoin de vérifier le manifeste d'intégration pour que cela fonctionne. Fonctionne comme un charme!

Je poste la solution ici, car j’ai également trouvé cette question ici.

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