Regsvr32 : enregistrer une DLL dans le registre Windows

Regsvr32 est l'utilitaire en ligne de commande de Microsoft Windows qui inscrit une bibliothèque de liens dynamiques dans le registre, ou l'en retire. Il ne sert qu'aux composants COM : une DLL ordinaire, chargée directement par un programme, n'a pas besoin d'être enregistrée.

En bref

  • Regsvr32 inscrit une bibliothèque de liens dynamiques dans le registre Windows, ou l'en retire.
  • Il ne sert qu'aux composants COM : lancé sur une bibliothèque ordinaire, il renvoie une erreur de point d'entrée, ce qui ne signale aucun défaut du fichier.
  • La commande exige une invite ouverte en administrateur, faute de quoi l'écriture dans le registre est refusée.

Cette page détaille la syntaxe complète, les options disponibles, la distinction entre les versions 32 et 64 bits, et les messages d'erreur que la commande renvoie le plus souvent.

À quoi sert regsvr32

Certains fichiers DLL exposent des objets réutilisables par plusieurs applications, selon le modèle COM. Pour qu'un programme puisse les appeler par leur nom plutôt que par leur chemin, le système doit connaître leur emplacement : c'est ce que le registre Windows enregistre.

Regsvr32 ne copie ni ne répare rien. Il appelle simplement une fonction contenue dans le fichier, DllRegisterServer, qui écrit elle-même ses clés dans le registre. C'est un point important : si la DLL ne contient pas cette fonction, la commande échouera quoi que vous fassiez, et le problème vient du fichier, pas de la commande.

Les contrôles OCX, anciens composants d'interface, s'enregistrent exactement de la même façon. Notre page sur la définition d'un fichier DLL revient sur ce qui distingue une bibliothèque partagée d'un simple fichier de programme.

La syntaxe et les options

La commande s'écrit ainsi :

regsvr32 [/u] [/s] [/n] [/i[:ligne_de_commande]] nom_du_fichier.dll

  • /u : désenregistrer le composant au lieu de l'enregistrer.
  • /s : mode silencieux, aucune boîte de dialogue n'apparaît. Utile dans un script.
  • /n : ne pas appeler DllRegisterServer. Cette option n'a de sens qu'associée à /i.
  • /i : appeler DllInstall en lui transmettant une ligne de commande facultative.

Le nom du fichier est le seul argument obligatoire. Indiquez le chemin complet dès que la DLL ne se trouve pas dans le dossier courant : c'est la cause la plus fréquente d'un échec sans explication.

Enregistrer une DLL : la procédure

L'opération demande des droits d'administrateur, puisqu'elle écrit dans le registre.

Ouvrez le menu Démarrer, tapez cmd, faites un clic droit sur Invite de commandes et choisissez d'exécuter en tant qu'administrateur. Saisissez ensuite la commande en donnant le chemin complet du fichier :

regsvr32 C:\Windows\System32\exemple.dll

Une boîte de dialogue confirme que l'inscription a réussi. Pour désenregistrer le même composant, ajoutez l'option d'annulation :

regsvr32 /u C:\Windows\System32\exemple.dll

Désenregistrer puis réenregistrer est la manipulation classique lorsqu'une application signale un composant introuvable alors que le fichier est bien présent sur le disque.

Systèmes 64 bits : deux exécutables portant le même nom

C'est le piège le plus courant, et il ne produit aucun message clair.

Sur un Windows 64 bits, deux versions de regsvr32 coexistent. Celle de C:\Windows\System32 est la version 64 bits, celle de C:\Windows\SysWOW64 la version 32 bits. Le nom du dossier prête à confusion, mais c'est bien ainsi : System32 contient le code 64 bits.

Une DLL 32 bits doit être enregistrée avec le regsvr32 de SysWOW64, une DLL 64 bits avec celui de System32. Un composant enregistré avec la mauvaise version renvoie une erreur de module introuvable, ou s'enregistre sans que l'application le voie ensuite.

En cas de doute, essayez explicitement l'autre chemin :

C:\Windows\SysWOW64\regsvr32.exe nom_du_fichier.dll

Les messages d'erreur les plus fréquents

« Le module n'a pas pu être chargé. » Le fichier est introuvable au chemin indiqué, ou une dépendance dont il a besoin manque elle-même. Vérifiez d'abord l'orthographe et le chemin complet.

« Le point d'entrée DllRegisterServer est introuvable. » La DLL n'est pas un composant COM et n'a donc rien à enregistrer. Cette erreur signifie que la commande ne s'applique pas à ce fichier ; notre page sur l'erreur DllRegisterServer introuvable détaille les vérifications à mener.

« L'appel à DllRegisterServer a échoué avec le code d'erreur 0x80070005. » Accès refusé : l'invite de commandes n'a pas été ouverte en administrateur.

« Le module a été chargé mais l'appel a échoué avec le code 0x8002801c. » Même cause dans la plupart des cas, parfois liée au contrôle de compte d'utilisateur.

Un fichier corrompu ou incomplet produit également des échecs sans logique apparente. Notre guide sur l'erreur DLL sous Windows couvre les causes qui ne relèvent pas de l'enregistrement.

Ce que regsvr32 ne fait pas

La commande est souvent présentée comme un remède universel aux problèmes de DLL, ce qu'elle n'est pas.

Elle ne télécharge aucun fichier, ne répare pas une bibliothèque endommagée et ne résout pas une dépendance manquante. Si un composant est absent du disque, l'enregistrer est impossible : il faut d'abord réinstaller l'application ou le composant redistribuable qui le fournit. Notre page consacrée aux fichiers DLL de Windows explique d'où proviennent ces bibliothèques.

Elle ne concerne pas non plus les bibliothèques .NET, qui utilisent un mécanisme différent et l'utilitaire dédié du framework.

Un utilitaire détourné par des logiciels malveillants

Regsvr32 étant signé par Microsoft et présent sur toutes les installations de Windows, il est employé pour exécuter du code en contournant certaines restrictions. La technique consiste à lui faire charger un script distant plutôt qu'une bibliothèque locale, en s'appuyant sur le composant scrobj.dll.

Elle est répertoriée dans les référentiels de sécurité et surveillée par la plupart des outils de détection. Conséquence pratique : une commande regsvr32 comportant une adresse internet doit être considérée comme suspecte, et un antivirus qui bloque un appel de ce type ne se trompe pas nécessairement.

Pour un usage normal, la règle est simple : n'enregistrez que des fichiers présents sur votre disque, provenant d'une installation légitime.

Questions fréquentes

Faut-il redémarrer après avoir enregistré une DLL ?

Ce n'est généralement pas nécessaire, l'inscription prenant effet immédiatement. En revanche, une application déjà ouverte doit être relancée pour voir le nouveau composant.

Peut-on enregistrer plusieurs DLL en une fois ?

Pas avec une seule commande. Un fichier de commandes reprenant plusieurs lignes, chacune avec l'option silencieuse, permet de traiter un lot sans validation manuelle.

Où se trouve regsvr32.exe ?

Dans C:\Windows\System32 pour la version 64 bits et C:\Windows\SysWOW64 pour la version 32 bits. Le fichier fait partie de Windows et ne se télécharge pas.

Comment savoir si une DLL est déjà enregistrée ?

En recherchant son nom dans le registre, sous la clé des classes. Plus simplement, un réenregistrement d'une bibliothèque déjà inscrite ne provoque aucun dommage : la commande réécrit les mêmes clés.

Derniers articles

Vous aimerez aussi