Question Comment savoir si une DLL est enregistrée?


Lorsque vous enregistrez une DLL sur d'anciennes machines (Windows XP), regsrv indique toujours que l'enregistrement a réussi. Cela se produit même si l'utilisateur n'a pas l'autorisation de s'inscrire.

Avec le nom de la dll, y a-t-il une commande que je peux exécuter sur la ligne de commande pour vérifier si une DLL est installée?


19
2018-02-19 18:50


origine




Réponses:


J'ai trouvé ce lien: Comment savoir si une DLL a été enregistrée?:

Étant donné que l’enregistrement de DLL peut englober des opérations arbitraires,   n’est pas un moyen général de déterminer si l’enregistrement a été   eu lieu pour une DLL arbitraire.

Pour déterminer si une DLL a été enregistrée, vous devez importer   connaissances spécifiques à un domaine. Si vous savez qu'une DLL enregistre un COM   objet avec un CLSID particulier, vous pouvez vérifier si ce CLSID est   en effet enregistré.

OK, c'est impossible, mais les DLL s'enregistrent généralement en créant une entrée dans le registre. Une solution de contournement consiste à:

  1. Vous devez d’abord découvrir le GUID COM de la DLL. Si vous avez une machine sur laquelle elle est déjà enregistrée, vous pouvez:
    1. Ouvrez regedit et recherchez votre nom de fichier DLL
    2. S'il est enregistré, vous trouverez le nom de fichier sous une clé située sous la bibliothèque de types. La clé ressemblera à: {9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. Maintenant que vous connaissez le GUID de la DLL, vous pouvez le rechercher avec cette commande dans une invite DOS: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Une meilleure réponse me permettrait de trouver le GUID directement à partir du fichier avant qu'il ne soit enregistré. Au moins de cette façon, vous pouvez créer un script à installer et vérifier s'il a été correctement installé.


15
2018-02-19 18:58



En réalité, vous n'avez pas besoin de connaître le GUID à l'avance. Une approche plus simple consisterait à rechercher la DLL dans le registre. nom de fichier: si ce nom est répertorié sous l'une de ces clés GUID, alors oui, la DLL a bien été enregistrée. - Massimo
@ Massimo: mais comment je le chercherais? Dans quelle clé? Il peut ne pas s'afficher correctement dans l'historique du shell (par exemple, essayer de s'enregistrer sans être un administrateur) - neves
Sous HKCR, évidemment :) Ou à tout le moins sous HKLM. Les éléments spécifiques à l'utilisateur (tels que l'historique du shell) sont sous HKCU. - Massimo
@ Massimo: si vous mettez une réponse ici avec la commande shell pour la rechercher, je la marque comme la réponse correcte. - neves
C'est pareil que le tien: use REG QUERY rechercher le nom du fichier DLL. - Massimo


Je devais vérifier si une DLL avec un nom particulier est enregistrée et j'ai utilisé cette commande dans mon BAT:

reg query HKLM\SOFTWARE\Classes /s /f whatever.dll
if errorlevel 1 goto DLL_MISSING

Si avec errorlevel, le contrôle est envoyé à l'étiquette reg query rien trouvé. Vous devrez peut-être modifier la partie du registre où vous effectuez une recherche (dans mon cas HKLM'..., plus le chemin est spécifique, plus vite, sinon cela prend très longtemps).

La sortie peut être traitée si nécessaire, le GUID de l'entrée peut être obtenu, mais cela sort de la portée de la commande de requête reg.


10
2017-07-30 13:55