Étant donné que cette question est étiquetée "vb.net", je me demande pourquoi vous essayez d'enregistrer une DLL que vous avez créée dans VB.NET. A utiliser avec regsvr32, une DLL doit exporter les fonctions DllRegisterServeret DllUnregisterServer. Il n'y a pas de registre pour la grande majorité des DLL que vous créez.
Cody Gray
12
Qu'entendez-vous par ne fonctionne pas ou n'est pas utile? Recevez-vous un message d'erreur? Ça dit quoi?
Cody Gray
Réponses:
68
Tapez regsvr32 name.dlldans l'invite de commande (exécuté en mode élevé!) Et appuyez sur "Entrée". Notez que name.dlldoit être remplacé par le nom de la DLL que vous souhaitez enregistrer. Par exemple, si vous souhaitez enregistrer le iexplore.dll, tapez regsvr32 iexplore.dll.
Ce problème se produit car le fichier Regsvr32.exe dans le dossier System32 est une version 64 bits. Lorsque vous exécutez Regsvr32 pour inscrire une DLL, vous utilisez la version 64 bits par défaut.
Solution de cet article:
Pour résoudre ce problème, exécutez Regsvr32.exe à partir du dossier% SystemRoot% \ Syswow64. Par exemple, tapez les commandes suivantes pour enregistrer la DLL:
cd \windows\syswow64regsvr32 c:\filename.dll
Cela devrait vraiment être la bonne réponse. Je peux comprendre que dans son message original, la syntaxe était incorrecte, mais Rajkumar a commenté qu'il recevait un message d'erreur même en utilisant la syntaxe correcte. Cela prend deux étapes pour trouver la bonne réponse pour quelqu'un qui recherche au lieu d'une. D'abord à la réponse choisie comme correcte, puis en suivant la chaîne de commentaires, pour finir sur ce post.
Rob
102
Si la DLL est de 32 bits:
Copiez la DLL dans C: \ Windows \ SysWoW64 \
Dans une invite de commandes avec élévation de privilèges :%windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll
si la DLL est 64 bits:
Copiez la DLL dans C: \ Windows \ System32 \
Dans une invite de commandes avec élévation de privilèges:%windir%\System32\regsvr32.exe %windir%\System32\namedll.dll
Je sais que cela semble être le mauvais sens, mais c'est ainsi que cela fonctionne. Voir:
http://support.microsoft.com/kb/249873
Quote: «Remarque sur une version 64 bits d'un système d'exploitation Windows, il existe deux versions du fichier Regsv32.exe: la
version 64 bits est% systemroot% \ System32 \ regsvr32.exe.
La version 32 bits est% systemroot% \ SysWoW64 \ regsvr32.exe.
"
+1 pour "Je sais que cela semble être le mauvais sens, mais c'est ainsi que cela fonctionne" avec un lien vers support.microsoft.com ... sans le lien, c'est difficile à croire.
Trevor Boyd Smith
6
"En cmd élevé" est très important !!
shindigo
4
Je ne pense pas que nous devions le copier dans le dossier system32 ou syswow64. Enregistrez simplement le fichier où qu'il se trouve.
Nikos
30
Sur un système x64, system32 est pour 64 bits et syswow64 est pour 32 bits (pas l'inverse comme indiqué dans une autre réponse). WOW (Windows sur Windows) est le sous-système 32 bits qui s'exécute sous le sous-système 64 bits).
C'est un désordre dans les termes de nommage, et ne sert qu'à confondre, mais c'est comme ça.
Encore ...
syswow64 est 32 bits, PAS 64 bits.
system32 est 64 bits, PAS 32 bits.
Il existe un regsrv32 dans chacun de ces répertoires. L'un est 64 bits et l'autre 32 bits. C'est la même chose avec odbcad32 et et al. (Si vous voulez voir des pilotes ODBC 32 bits qui n'apparaîtront pas avec l'odbcad32 par défaut dans system32 qui est 64 bits.)
Pourquoi est-ce important? regsvr32s'occupera des détails, théoriquement, il détectera si vous enregistrez une DLL 32 bits ou 64 bits: stackoverflow.com/questions/18935163/…
Sk8erPeter
8
Ouvrez le menu Démarrer et tapez cmd dans la zone de recherche Maintenez Ctrl + Maj et appuyez sur Entrée
Cela exécute l'invite de commandes en mode administrateur.
Si vous avez déjà copié le fichier filename.dll dans le dossier syswow64 et que vous changez le répertoire de travail en syswow64 dans l'invite de commande, le "c: \" dans "regsvr32 c: \ filename.dll" n'est pas nécessaire. En bref, "regsvr32 c: \ filename.dll" devrait lire "regsvr32 filename.dll"
Tout ici échouait comme un mauvais chemin. Puis je me suis souvenu d'un truc des vieux jours de Win95. Ouvrez le dossier du programme où réside le fichier .dll, ouvrez C: / Windows / System32, faites défiler jusqu'à regsvr32 et faites glisser et déposez la dll du dossier du programme sur rgsrver32. Boum, c'est fait.
cela fonctionne mais pourrait être problématique si vous devez l'exécuter en tant qu'administrateur.
workabyte
3
Connaître le message d'erreur serait plutôt précieux. Il est destiné à fournir des informations, même si cela n'a aucun sens pour vous, cela nous concerne. Étant obligé de deviner, je dirais que la DLL est un filtre DirectX 32 bits. Dans ce cas, cela devrait être la bonne marche à suivre:
cd c:\windows\syswow64
move ..\system32\dllname.ax .
regsvr32.exe dllname.ax
Cela doit être exécuté à une invite de commandes avec élévation de privilèges afin que l'UAC ne puisse pas arrêter l'accès au Registre requis. Posez plus de questions à ce sujet sur superuser.com
Je viens de tester cette méthode extrêmement simple et cela fonctionne parfaitement - mais j'utilise le compte administrateur intégré, donc je n'ai pas à sauter à travers des obstacles pour des privilèges élevés.
Le fichier de commandes suivant évite à l'utilisateur de devoir déplacer des fichiers vers / hors des dossiers système. Il laisse également à Windows le soin d'appliquer la bonne version deRegsvr32 .
INSTRUCTIONS:
Dans le dossier qui contient la bibliothèque ( -.dllou -.ax) le fichier que vous souhaitez enregistrer, ouvrez un nouveau fichier texte et collez-le dans UNE des routines ci-dessous:
echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 64-BIT SYSTEMS
copy %1 C:\Windows\System32
regsvr32 "%nx1"
echo END BATCH FILE
pause
echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 32-BIT SYSTEMS
copy %1 C:\Windows\SysWOW64
regsvr32 "%nx1"
echo END BATCH FILE
pause
Enregistrez votre nouveau fichier texte en tant que fichier batch ( -.bat); puis faites simplement glisser et déposez votre fichier -.dllou -.axpar-dessus le fichier de commandes.
Si l'UAC ne vous donne pas la possibilité d'exécuter le fichier de commandes en tant qu'administrateur, vous devrez peut-être élever manuellement les privilèges (les instructions concernent Windows 7):
Cliquez avec le bouton droit sur le fichier batch;
Sélectionnez Create shortcut;
Cliquez avec le bouton droit sur le raccourci;
Sélectionnez Properties;
Cliquez sur l' Compatibilityonglet;
Cochez la case étiquetée Run this program as administrator;
Faites glisser et déposez votre fichier -.dllou -.axsur le nouveau raccourci au lieu du fichier de commandes.
Voilà . J'ai choisi COPYau lieu de MOVEpour empêcher l'échec de toute tentative de suivi liée à l'UAC. Une inscription réussie doit être suivie de la suppression du fichier ( -.dllou ) de la bibliothèque d'origine -.ax.
Ne vous inquiétez pas des copies effectuées dans le dossier système ( C:\Windows\System32ou C:\Windows\SysWOW64) par les passes précédentes - elles seront écrasées à chaque fois que vous exécuterez le fichier de commandes.
Sauf si vous avez exécuté le mauvais fichier de commandes , auquel cas vous voudrez probablement supprimer la copie effectuée dans le mauvais dossier système ( C:\Windows\System32ouC:\Windows\SysWOW64 ) avant d'exécuter le bon fichier de commandes, ... ou ...
Aidez Windows à choisir le bon fichier de bibliothèque à enregistrer en qualifiant entièrement son emplacement de répertoire.
À partir du fichier de commandes de droite, copiez le chemin du dossier système
Si 64 bits: C:\Windows\System32
Si 32 bits: C:\Windows\SysWOW64
Collez-le sur la ligne suivante pour qu'il précède %nx1
Si 64 bits: regsvr32 "C:\Windows\System32\%nx1"
Si 32 bits: regsvr32 "C:\Windows\SysWOW64\%nx1"
Coller le chemin entre guillemets
Insérer une barre oblique inverse pour séparer %nx1le chemin du dossier système
ou ...
Exécutez ce fichier de commandes de fusil de chasse, qui (dans l'ordre):
Effectuer le nettoyage des processus d'inscription abandonnés
Inversez tout processus d'inscription complété par votre fichier de bibliothèque;
Supprimez toutes les copies de votre fichier de bibliothèque qui ont été enregistrées dans l'un ou l'autre des dossiers système;
Pause pour vous permettre de terminer le fichier de commandes à ce stade (et en exécuter un autre si vous le souhaitez).
Tentative d'installation 64 bits sur votre fichier de bibliothèque
Copiez votre fichier de bibliothèque dans C:\Windows\System32;
Enregistrez votre fichier de bibliothèque en tant que processus 64 bits;
Pause pour vous permettre de terminer le fichier de commandes à ce stade.
Annuler l'installation 64 bits
Inversez tout enregistrement de votre fichier de bibliothèque en tant que processus 64 bits;
Supprimez votre fichier de bibliothèque de C:\Windows\System32;
Pause pour vous permettre de terminer le fichier de commandes à ce stade (et en exécuter un autre si vous le souhaitez).
Tentative d'installation 32 bits sur votre fichier de bibliothèque
Copiez votre fichier de bibliothèque dans C:\Windows\SystemWOW64
Enregistrez votre fichier de bibliothèque en tant que processus 32 bits;
Pause pour vous permettre de terminer le fichier de commandes à ce stade.
Supprimer la copie originale non enregistrée du fichier de bibliothèque
Run as administratorest grisé lorsque j'ai créé un raccourci pour le fichier chauve-souris. Je suis connecté en tant qu'administrateur. Aussi, est-ce %nx1ou %n1?
Jon Grah
3
Il y a une différence dans Windows 7. La connexion en tant qu'administrateur ne fonctionne pas donne les mêmes droits que lors de l'exécution d'un programme en tant qu'administrateur.
Allez dans Démarrer - Tous les programmes - Accessoires. Cliquez avec le bouton droit sur la fenêtre de commande et sélectionnez "Exécuter en tant qu'administrateur" Enregistrez maintenant la dll normalement via: regsrvr32 xxx.dll
Et ce faisant, si vous obtenez le code d'erreur 0x80040201, essayez la solution dans DllRegisterServer a échoué avec le code d'erreur 0x80040201 , mais assurez-vous que vous ouvrez l'invite de commande en tant qu'exécuter en tant qu'administrateur .
Une partie de la confusion concernant regsvr32 est que sur les fenêtres 64 bits, le nom et le chemin n'ont pas changé, mais il enregistre désormais les DLL 64 bits. Le regsvr32 32 bits existe dans SysWOW64, un nom qui semble représenter des applications 64 bits. Cependant, le WOW64 dans le nom fait référence à Windows sur Windows 64, ou plus explicitement Windows 32 bits sur Windows 64 bits. Quand on y pense de cette façon, le nom a du sens même s'il est déroutant dans ce contexte.
Je ne trouve pas ma source originale sur un blog MSDN mais elle est référencée dans cet article de Wikipedia http://en.wikipedia.org/wiki/WoW64
Voici comment j'ai résolu ce problème sur une machine Win7 x64:
1 - message d'erreur:
"CoCreateInstance () a échoué Veuillez vérifier vos entrées de registre CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} et assurez-vous que vous êtes connecté en tant qu'administrateur"
2 - procédure de correction:
Démarrez / tapez cmd / RightMouseCliquez sur cmd.exe et choisissez "Exécuter en tant qu'administrateur"
tapé: regsvr32 / s C: \ Program Files \ Autodesk \ 3ds Max Design 2015 \ atl.dll regsvr32 / s C: \ Program Files \ Autodesk \ 3ds Max Design 2015 \ MAXComponents.dll
regsvr32
, une DLL doit exporter les fonctionsDllRegisterServer
etDllUnregisterServer
. Il n'y a pas de registre pour la grande majorité des DLL que vous créez.Réponses:
Tapez
regsvr32 name.dll
dans l'invite de commande (exécuté en mode élevé!) Et appuyez sur "Entrée". Notez quename.dll
doit être remplacé par le nom de la DLL que vous souhaitez enregistrer. Par exemple, si vous souhaitez enregistrer le iexplore.dll, tapezregsvr32 iexplore.dll
.la source
regsvr32
chemin du fichier .dll avec le nom de fichier et l'extension et appuyez sur EntréeEh bien, vous ne spécifiez pas s'il s'agit d'une DLL 32 ou 64 bits et vous n'incluez pas le message d'erreur, mais je suppose que c'est le même problème que celui décrit dans cet article de la base de connaissances : Message d'erreur lorsque vous exécutez Regsvr32.exe sur Windows 64 bits
Citation de cet article:
Solution de cet article:
la source
Si la DLL est de 32 bits:
Copiez la DLL dans C: \ Windows \ SysWoW64 \
Dans une invite de commandes avec élévation de privilèges :
%windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll
si la DLL est 64 bits:
Copiez la DLL dans C: \ Windows \ System32 \
Dans une invite de commandes avec élévation de privilèges:
%windir%\System32\regsvr32.exe %windir%\System32\namedll.dll
Je sais que cela semble être le mauvais sens, mais c'est ainsi que cela fonctionne. Voir:
http://support.microsoft.com/kb/249873
Quote: «Remarque sur une version 64 bits d'un système d'exploitation Windows, il existe deux versions du fichier Regsv32.exe: la
version 64 bits est% systemroot% \ System32 \ regsvr32.exe.
La version 32 bits est% systemroot% \ SysWoW64 \ regsvr32.exe.
"
la source
Sur un système x64, system32 est pour 64 bits et syswow64 est pour 32 bits (pas l'inverse comme indiqué dans une autre réponse). WOW (Windows sur Windows) est le sous-système 32 bits qui s'exécute sous le sous-système 64 bits).
C'est un désordre dans les termes de nommage, et ne sert qu'à confondre, mais c'est comme ça.
Encore ...
syswow64 est 32 bits, PAS 64 bits.
system32 est 64 bits, PAS 32 bits.
Il existe un regsrv32 dans chacun de ces répertoires. L'un est 64 bits et l'autre 32 bits. C'est la même chose avec odbcad32 et et al. (Si vous voulez voir des pilotes ODBC 32 bits qui n'apparaîtront pas avec l'odbcad32 par défaut dans system32 qui est 64 bits.)
la source
regsvr32
s'occupera des détails, théoriquement, il détectera si vous enregistrez une DLL 32 bits ou 64 bits: stackoverflow.com/questions/18935163/…Ouvrez le menu Démarrer et tapez cmd dans la zone de recherche Maintenez Ctrl + Maj et appuyez sur Entrée
Cela exécute l'invite de commandes en mode administrateur.
Tapez maintenant:
regsvr32 MyComobject.dll
la source
Enfin, j'ai trouvé la solution, exécutez simplement CMD en tant qu'administrateur puis écrivez
alors écris ceci
J'espère que cette réponse vous aidera
la source
Si la DLL est de 32 bits:
si la DLL est de 64 bits:
la source
Tout ici échouait comme un mauvais chemin. Puis je me suis souvenu d'un truc des vieux jours de Win95. Ouvrez le dossier du programme où réside le fichier .dll, ouvrez C: / Windows / System32, faites défiler jusqu'à regsvr32 et faites glisser et déposez la dll du dossier du programme sur rgsrver32. Boum, c'est fait.
la source
Connaître le message d'erreur serait plutôt précieux. Il est destiné à fournir des informations, même si cela n'a aucun sens pour vous, cela nous concerne. Étant obligé de deviner, je dirais que la DLL est un filtre DirectX 32 bits. Dans ce cas, cela devrait être la bonne marche à suivre:
Cela doit être exécuté à une invite de commandes avec élévation de privilèges afin que l'UAC ne puisse pas arrêter l'accès au Registre requis. Posez plus de questions à ce sujet sur superuser.com
la source
Je viens de tester cette méthode extrêmement simple et cela fonctionne parfaitement - mais j'utilise le compte administrateur intégré, donc je n'ai pas à sauter à travers des obstacles pour des privilèges élevés.
Le fichier de commandes suivant évite à l'utilisateur de devoir déplacer des fichiers vers / hors des dossiers système. Il laisse également à Windows le soin d'appliquer la bonne version de
Regsvr32
.INSTRUCTIONS:
Dans le dossier qui contient la bibliothèque (
-.dll
ou-.ax
) le fichier que vous souhaitez enregistrer, ouvrez un nouveau fichier texte et collez-le dans UNE des routines ci-dessous:Enregistrez votre nouveau fichier texte en tant que fichier batch (
-.bat
); puis faites simplement glisser et déposez votre fichier-.dll
ou-.ax
par-dessus le fichier de commandes.Si l'UAC ne vous donne pas la possibilité d'exécuter le fichier de commandes en tant qu'administrateur, vous devrez peut-être élever manuellement les privilèges (les instructions concernent Windows 7):
Create shortcut
;Properties
;Compatibility
onglet;Run this program as administrator
;-.dll
ou-.ax
sur le nouveau raccourci au lieu du fichier de commandes.Voilà . J'ai choisi
COPY
au lieu deMOVE
pour empêcher l'échec de toute tentative de suivi liée à l'UAC. Une inscription réussie doit être suivie de la suppression du fichier (-.dll
ou ) de la bibliothèque d'origine-.ax
.Ne vous inquiétez pas des copies effectuées dans le dossier système (
C:\Windows\System32
ouC:\Windows\SysWOW64
) par les passes précédentes - elles seront écrasées à chaque fois que vous exécuterez le fichier de commandes.Sauf si vous avez exécuté le mauvais fichier de commandes , auquel cas vous voudrez probablement supprimer la copie effectuée dans le mauvais dossier système (
C:\Windows\System32
ouC:\Windows\SysWOW64
) avant d'exécuter le bon fichier de commandes, ... ou ...Aidez Windows à choisir le bon fichier de bibliothèque à enregistrer en qualifiant entièrement son emplacement de répertoire.
C:\Windows\System32
C:\Windows\SysWOW64
%nx1
regsvr32 "C:\Windows\System32\%nx1"
regsvr32 "C:\Windows\SysWOW64\%nx1"
%nx1
le chemin du dossier systèmeExécutez ce fichier de commandes de fusil de chasse, qui (dans l'ordre):
C:\Windows\System32
;C:\Windows\System32
;C:\Windows\SystemWOW64
la source
Run as administrator
est grisé lorsque j'ai créé un raccourci pour le fichier chauve-souris. Je suis connecté en tant qu'administrateur. Aussi, est-ce%nx1
ou%n1
?Il y a une différence dans Windows 7. La connexion en tant qu'administrateur ne fonctionne pas donne les mêmes droits que lors de l'exécution d'un programme en tant qu'administrateur.
Allez dans Démarrer - Tous les programmes - Accessoires. Cliquez avec le bouton droit sur la fenêtre de commande et sélectionnez "Exécuter en tant qu'administrateur" Enregistrez maintenant la dll normalement via: regsrvr32 xxx.dll
la source
Et ce faisant, si vous obtenez le code d'erreur 0x80040201, essayez la solution dans DllRegisterServer a échoué avec le code d'erreur 0x80040201 , mais assurez-vous que vous ouvrez l'invite de commande en tant qu'exécuter en tant qu'administrateur .
la source
Vous devez exécuter le
cmd.exe
dansc:\windows\system32\ by administrator
Commandes: pour les fichiers de désinscription * .dll
regsvr32.exe /u C:\folder\folder\name.dll
Pour les fichiers d' enregistrement * .dll
la source
Une partie de la confusion concernant regsvr32 est que sur les fenêtres 64 bits, le nom et le chemin n'ont pas changé, mais il enregistre désormais les DLL 64 bits. Le regsvr32 32 bits existe dans SysWOW64, un nom qui semble représenter des applications 64 bits. Cependant, le WOW64 dans le nom fait référence à Windows sur Windows 64, ou plus explicitement Windows 32 bits sur Windows 64 bits. Quand on y pense de cette façon, le nom a du sens même s'il est déroutant dans ce contexte.
Je ne trouve pas ma source originale sur un blog MSDN mais elle est référencée dans cet article de Wikipedia http://en.wikipedia.org/wiki/WoW64
la source
Voici comment j'ai résolu ce problème sur une machine Win7 x64:
1 - message d'erreur:
"CoCreateInstance () a échoué Veuillez vérifier vos entrées de registre CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} et assurez-vous que vous êtes connecté en tant qu'administrateur"
2 - procédure de correction:
J'espère que cela t'aides !
la source