2010-06-16 23 views
2

Nous avons une ancienne application VB6 qui se met à jour au démarrage en extrayant les derniers fichiers et en enregistrant les composants COM. Cela fonctionne à la fois pour les composants COM ActiveX (regsvr32) locaux et les composants COM ActiveX distants (clireg32) enregistrés dans COM + sur une autre machine.Enregistrement de DLL à distance sans accès à HKEY_CLASSES_ROOT

De nouvelles exigences nous empêchent d'écrire dans HKEY_LOACL_MACHINE (HKLM) pour des raisons de sécurité, ce qui est le cas par défaut lors de l'appel de regsvr32 et clireg32.

Nous avons trouvé un moyen d'enregistrer le composant COM local sous HKEY_CURRENT_USER \ Software \ Classes (HKCU) en utilisant la méthode API Windows RegOverridePredefKey. Cela fonctionne en redirigeant les insertions dans le registre vers l'emplacement HKCU. Ensuite, lorsque les composants COM sont instanciés, Windows commence par rechercher HKCU avant de rechercher les informations de composant dans HKLM. Cela remplace ce que fait regsvr32. Le problème que nous rencontrons actuellement est lorsque nous essayons d'enregistrer VBR/TLB en utilisant clireg32, ce processus d'enregistrement ajoute également des clés d'enregistrement à HKEY_LOACL_MACHINE.

Existe-t-il un moyen de rediriger clireg32.exe pour enregistrer le composant est HKEY_CURRENT_USER? Existe-t-il d'autres méthodes qui nous permettraient d'enregistrer ces composants COM + sur les ordinateurs clients avec un accès de sécurité limité? Notre seule solution pour le moment serait d'écrire manuellement les informations d'enregistrement dans le registre, mais ce n'est pas idéal et ce serait un problème majeur.

Répondre

3

Je vois peu de réponses heureuses ici. La notion d'une application utilisant la technologie de 12 ans ayant besoin d'installer des mises à jour est étrange et n'est pas bien supportée par les machines modernes. Une solution commune comme COM sans Reg est sortie, je pense, pas compatible avec COM +. Il est également assez étrange qu'une mise à jour de style de réparation de bogues ait besoin de réenregistrer des composants. Avez-vous vérifié que cela est réellement nécessaire?

S'étendant sur ce thème, à quelle fréquence modifiez-vous réellement les GUID dans les déploiements? Prendre en charge l'enregistrement vous-même plutôt que de le laisser aux composants eux-mêmes devrait être réalisable lorsque les clés ne changent pas constamment. Pourrait être aussi facile que de capturer l'enregistrement avec l'utilitaire ProcMon de SysInternals, composer un fichier .reg qui définit les clés HKCU à la place. Au-delà de cela, vous avez vraiment besoin de gagner le droit aux clés de registre qui ne sont pas inscriptibles. Si vous ne pouvez pas obtenir l'accord du client, pensez à demander une tâche planifiée qui installe les mises à jour. Ils peuvent avoir accès, à condition que l'administrateur du système le permette.

+0

Tous vos commentaires arrivent à la maison et nous avons poussé pour eux. Je souhaite que la réponse était un simple passage à .net chose. Tout le nouveau dev est fait dans .net, mais le reste de l'application "fonctionne" et des corrections de bugs ont lieu. Nous cherchons à le garder tel quel, sans réécriture complète. Le GUID et les interfaces ne changent pas souvent, nous avons utilisé ProcMon/Regmon pour voir ce qui se passe et c'est une alternative que nous pouvons utiliser. Comme vous l'avez mentionné, Reg Free COM ne semble pas être une alternative que nous pouvons utiliser. –