2008-11-20 7 views
0

J'ai une page de diagnostic logiciel sur laquelle j'aimerais répertorier les informations de la version du fichier de certaines DLL COM. La page s'exécute sous le compte ASP.Net normal restreint (SERVICE RÉSEAU).Recherche de la version du fichier d'une DLL COM à l'aide d'ASP.NET

Étant donné les ProgID d'une bibliothèque COM, quel est le meilleur moyen d'obtenir le chemin physique du fichier ou d'accéder autrement au fichier version #?

Notez que le charger via Type.GetTypeFromProgID et en utilisant l'objet Assembly du type ne fonctionnera pas, car l'objet Assembly retourné est celui de mscorlib.

Le chemin d'installation peut être sélectionné par l'utilisateur et n'est pas garanti d'être une valeur spécifique.

Répondre

1

Une façon d'aborder est d'utiliser la fonction COM CLSIDFromProgID (Pinvoke.Net montre comment appeler cela de .Net here) pour obtenir un CLSID, utilisez le GUID.ToString (« B ») pour convertir le CLSID Une chaîne correctement formatée l'utilise ensuite pour aller fouiller dans le registre pour trouver où le serveur COM est enregistré.

Le chemin sera
HKEY_CLASSES_ROOT\CLSID\<YourCLSID>\InprocServer32 si le serveur COM est un serveur en cours (par exemple une DLL que vous attendez)

Notez que le chemin du fichier dans le registre n'est pas nécessairement un chemin complet .

+0

Cela semble fonctionner, merci! Savez-vous à coup sûr quand le chemin risque de ne pas être un chemin entièrement qualifié? – technophile

+0

Le chemin d'accès est généralement qualifié, mais il appartient au code du programme d'installation d'écrire le chemin dans le registre. J'ai rencontré le code d'enregistrement COM DLL qui s'attend à ce que la DLL soit installée dans un répertoire dans le PATH. Cela cause du chagrin lorsque l'utilisateur installateur diffère de l'utilisateur consommateur! –

Questions connexes