2010-12-28 10 views
21

Ich versuche, eine COM-DLL-Datei unter Windows Server 2008 R2 zu registrieren. Hier sind die Schritte, die ich nahm:DLL-Datei unter Windows Server 2008 R2 registrieren

  1. Run cmd als Administrator
  2. c:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll

Wenn ich diesen Befehl ausführen, bekomme ich diesen Fehler:

The module temp12.dll failed to load. Make sure the binary is stored at the specified path or debut it to check for problems with the binary or dependent .DLL files. The specified module could not be found.

konnte ich das registrieren gleiche DLL-Datei unter Windows   2000.

Ich habe auch versucht

c:\windows\syswow64\regsvr32 "c:\tempdl\temp12.dll" 

Und ich habe diesen Fehler:

the module c:\tempdl\temp12.dll was loaded but the call to DllRegisterServer failed with error code 0x80040154 . For more information about this problem, search online using the error code as the search term

+0

Wenn Sie wollten alle setzen die die DLL in einem Dropbox irgendwo im Zusammenhang würde ich gerne das für Sie untersuchen . – Kev

+0

@kev danke für das Angebot Kev. Aber ich habe es behoben. –

Antwort

26

Das ist der Fehler, den Sie bekommen, wenn die DLL selbst einen anderen COM-Server benötigt, um zuerst registriert zu werden, oder eine Abhängigkeit von einer anderen DLL hat, die nicht verfügbar ist. Das Regsvr32.exe-Tool tut sehr wenig, es ruft LoadLibrary() auf, um das DLL zu laden, das in dem Befehlszeile-Argument übergeben wird. Dann GetProcAddress(), um den Einstiegspunkt DllRegisterServer() in der DLL zu finden. Und ruft es auf, es dem COM-Server zu überlassen, sich selbst zu registrieren.

Was dass Code ist ziemlich unverantwortlich. Die Diagnose, die Sie erhalten haben, ist jedoch aus dem Fehlercode ziemlich offensichtlich, aus irgendeinem Grund benötigt dieser COM-Server einen anderen, der zuerst registriert wird. Die Fehlermeldung ist beschissen, es sagt Ihnen nicht was anderen Server braucht es. Ein trauriger Nebeneffekt der Funktionsweise der COM-Fehlerbehandlung.

Um dies zu beheben, verwenden Sie das ProcMon-Tool von SysInternals. Es zeigt Ihnen, welche Registrierungsschlüssel Regsvr32.exe (eigentlich: der COM-Server) öffnet, um den Server zu finden. Suchen Sie nach Zugriffen auf den CLSID-Schlüssel. Das gibt Ihnen einen Hinweis darauf, wonach {guid} es sucht. Das sagt Ihnen immer noch nicht die Server-DLL, Sie sollten die Ablaufverfolgung mit einer vergleichen, die Sie von einer Maschine erhalten, die funktioniert. Der InprocServer32-Schlüssel hat den DLL-Pfad.

+0

Ich bin ein normaler Benutzer, der versucht, ein Programm zu debuggen, dass seine Autoren mir nicht antworten. Ich habe den Prozessmonitor heruntergeladen, aber ich weiß nicht, wie ich Ihrem letzten Absatz folgen soll. Können Sie mir erklären, wie Sie dieses Problem auf einfache Weise lösen können? – Ooker

4

Möglicherweise müssen diese DLL mit der 32-Bit-Version von regsvr32.exe registrieren:

c:\windows\syswow64\regsvr32 c:\tempdl\temp12.dll

+1

Ich habe das auch versucht und bekomme diesen Fehler "das Modul c: \ tempdl \ temp12.dll wurde geladen, aber der Aufruf von DllRegisterServer ist mit dem Fehlercode 0x80040154 fehlgeschlagen. Um weitere Informationen zu diesem Problem zu erhalten, suchen Sie online mit dem Fehlercode als Suchbegriff " –

+0

Machst du dies über eine Eingabeaufforderung mit erhöhten Berechtigungen? – vcsjones

+0

Ja, ich habe das folgende Skript in einer Fledermaus-Datei und läuft es als admin .. die Skript wie diese da cmd beginnt bei c: \ windows \ system32 cd .. cd syswow64 regsvr32 "c: \ tempdl \ temp12.dll" –

0

Sie können Sie müssen ATL installieren, wenn Ihre COM-Objekte ATL verwenden, wie in diesem KB-Artikel beschrieben:

http://support.microsoft.com/kb/201191

Diese Bibliotheken müssen wahrscheinlich von Entwicklern bereitgestellt werden, um die korrekte Version zu gewährleisten.

+0

Ich habe atl.dll in C: \ Windows \ SysWOW64 \ und C: \ Windows \ System32, muss ich noch tun, was sie in diesem Artikel gesagt haben? –

+0

Die DLLs, die ich im Jahr 2008 registrieren möchte, wurden im Jahr 2000 erstellt und ich weiß nicht einmal, ob wir den Quellcode haben. –

3

Fehler 0x80040154 ist COM REGDB_E_CLASSNOTREG, was "Klasse nicht registriert" bedeutet. Eine COM-Klasse wird in der Installationsregistrierung grundsätzlich nicht deklariert.

Wenn Sie diese Fehlermeldung erhalten, wenn eine DLL zu registrieren versuchen, kann es möglich sein, dass der Registrierungscode für diese DLL andere COM-Server (DLL oder EXE) zu instanziieren versucht, die fehlt oder ist nicht auf diese Installation registriert .

Wenn Sie keinen Zugriff auf die ursprüngliche DLL-Quelle haben, würde ich vorschlagen, SysInternal Process Monitor-Tool zu verwenden, um COM-Registry-Lookups zu verfolgen (es gibt ein einfacher RegMon-Tool, aber es funktioniert möglicherweise nicht mehr).

Sie sollten einen Filter auf den Arbeitsprozess setzen (hier: Regsvr32.exe), um nur zu erfassen, was interessant ist. Dann sollten Sie nach Abfragen für HKEY_CLASSES_ROOT \ [a progid, eine Zeichenfolge] suchen, die fehlschlagen (z. B. mit dem Fehler NAME_NOT_FOUND) oder mit Abfragen für HKEY_CLASSES_ROOT \ CLSID \ [a guid], die fehlschlagen.

PS: Leider kann es auf einem perfekt funktionierenden Windows-System viele Dinge geben, die scheitern, so dass Sie alle Fehler sorgfältig studieren müssen. Viel Glück :-)

0

Dies ist, was passieren muss.

Sie haben Ihre DLL zu kopieren, die Sie registrieren möchten: c: \ windows \ SysWOW64 \

dann im Dialogfeld Ausführen dieses in: C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll

und Sie werden das bekommen Nachricht:

DllRegisterServer in c:\windows\system32\YourDLL.dll succeeded.

+0

Das funktionierte für uns - wir hatten die DLL im falschen Ordner, als wir es in SysWOW64 einfügten, registrierte es kein Problem. Vielen Dank! – Vidar

+1

Es könnte für Sie arbeiten, aber Sie sollten nicht wirklich Ihre eigenen DLLs in die Systemordner kopieren. – njplumridge

1

ich habe ähnliches Problem gefunden, während meine activeX (OCX) in Windows Server 2008 R2.To dieses i http://www.chestysoft.com/dllregsvr/default.asp verwendet Registrierung lösen tool.There ist einige dependance Problem mit meinem ocx s o Ich bekomme "Das Modul temp12.dll konnte nicht geladen werden. Stellen Sie sicher, dass die Binärdatei unter dem angegebenen Pfad gespeichert ist, oder debuggen Sie sie, um nach Problemen mit den binären oder abhängigen .DLL-Dateien zu suchen. Das angegebene Modul konnte nicht gefunden werden "Fehlermeldung. Wenn Sie versuchen, Ihre OCX mit diesem Tool registriert, wird es Meldung, ob der Ocx Abhängigkeit hat oder Sie erhalten Erfolgsmeldung. Ich habe Nachricht für MFC70.dll und msvcr70.dll dependency.so ich diese dll in system32 ordner von C: \ windows und seine done.Nach diesem ich registrieren meine ocx erfolgreich.Ich benutze 32-bit-version von brustysoft tool (dllregsvr.exe) auf windows server 2008 R2 64bit maschine.

0

Sie müssen den vollständigen Pfad zum regsvr32 so% \ system32 \ windir $ regsvr32 < * .dll>