2012-03-26 3 views
19

Wir haben ein Projekt, kompiliert zu einem 32-Bit-COM-DLL und eine 64-Bit-COM-DLL (die gleiche aus my earlier question). Wenn ich beide auf meinem Windows 7-Rechner registriere, registrieren sich beide erfolgreich. Wenn ich beide auf einem Windows Server 2003-Computer registrieren, registrieren beide erfolgreich.32-Bit-DLL "möglicherweise nicht kompatibel" auf Server 2008, aber funktioniert auf Server 2003

Aber wenn ich versuche, den DLLs auf einem Windows Server 2008 R2 Standard SP1 Maschine zu registrieren, die 64-Bit-DLL erfolgreich registriert, aber der 32-Bit- DLL schlägt mit der Meldung (sic):

Das Modul ""% 1 "" ist möglicherweise nicht mit der von Ihnen ausgeführten Windows-Version kompatibel. Überprüfen Sie, ob das Modul mit einer x86 (32-Bit) - oder x64 (64-Bit) -Version von regsvr32.exe kompatibel ist.

Ich glaube nicht, dass eine 32-Bit-DLL mit WS2003 und Win7, aber nicht WS2008 kompatibel sein kann. Das macht keinen Sinn.

Was könnte passieren?

+1

Dies kann eine dumme Frage sein, aber wenn Sie sowohl eine 32-Bit- als auch eine 64-Bit-Version Ihrer Baugruppe haben, warum versuchen Sie dann, die 32-Bit-Version auf einem 64-Bit-Betriebssystem zu registrieren? – NotMe

+5

Dies ist vielleicht eine weniger gute Frage, aber warum gibt es einen Grammatikfehler in der Fehlermeldung? Soll das eine FU-Situation nahelegen? – arsaKasra

+2

Um die erste dumme Frage zu beantworten: Qualitätssicherung. Da 32-Bit-DLLs von 64-Bit-Windows unterstützt werden, müssen wir sicherstellen, dass unsere 32-Bit-DLL in dieser Situation funktioniert. –

Antwort

13

Die Version von Regsvr32.exe muss mit der 32-/64-Bit-Version der DLL übereinstimmen, die Sie registrieren möchten. Der 64-Bit-Regsvr32 kann eine 32-Bit-DLL nicht laden und umgekehrt.

Möglicherweise müssen Sie explizit die 32-Bit-Version von regsrv32 aufrufen, die sich in% systemroot% \ SysWoW64 \ regsvr32.exe befindet.

Von http://support.microsoft.com/kb/249873

Regsvr32.exe ist mit Microsoft Internet Explorer 3.0 oder späteren Versionen, Windows 95 OEM Service Release 2 (OSR2) oder spätere Versionen und Windows NT 4.0 Service Pack 5 (SP5) oder spätere Versionen enthält . Regsvr32.exe wird im Ordner System (Windows Me/Windows 98/Windows 95) oder System32 (Windows NT/Windows XP/Windows Vista/Windows 7) installiert.

Hinweis auf einem 64-Bit-Version eines Windows-Betriebssystem gibt es zwei Versionen der Datei Regsv32.exe:

  • Die 64-Bit-Version ist% systemroot% \ System32 \ regsvr32.exe.
  • Die 32-Bit-Version ist% systemroot% \ SysWoW64 \ regsvr32.exe.

Regsvr32.exe Nutzung RegSvr32.exe hat die folgenden Befehlszeilenoptionen: Regsvr32 [/ u] [/ n] [/ i [: cmdline]] DLLNAME

/u - Unregister Server /i - Rufen Sie DllInstall auf und übergeben Sie eine optionale [cmdline]; bei der Verwendung mit/u Anrufe dll deinstallieren /n - nicht DllRegisterServer aufrufen; Diese Option muss verwendet werden mit/i /s - Silent; Keine Meldungsfelder anzeigen (hinzugefügt mit Windows XP und Windows Vista) Wenn Sie Regsvr32.exe verwenden, versucht es, die Komponente zu laden, und seine DLLSelfRegister-Funktion aufzurufen. Wenn dieser Versuch erfolgreich ist, zeigt Regsvr32.exe ein Dialogfeld an, das Erfolg anzeigt. Wenn der Versuch nicht erfolgreich ist, gibt Regsvr32.exe eine Fehlermeldung zurück. Dies kann einen Win32-Fehlercode enthalten.Weitere Informationen finden Sie die folgende KB-Artikelnummer: 193625 WinInet Fehlercodes (12001 bis 12156)

+2

Die 64-Bit-Version von regsvr32 kann an die 32-Bit-Version delegieren, um 32-Bit-DLLs (nicht) zu registrieren und umgekehrt. Was wahrscheinlicher ist, ist, dass WOW64 überhaupt nicht installiert ist. Ab Windows Server 2008 R2 ist WOW64 jetzt eine optionale Komponente. –

+1

Gut zu wissen, danke! :) – nullforce

+3

Wir haben bereits versucht, SysWOW64 \ regsvr32 zu registrieren, um die 32-Bit-DLL zu registrieren, und das bringt den gleichen Fehler. –

2

Ich habe es registriert, indem Sie die DLL in das c: \ windows \ syswow64 \ verschieben Verzeichnis (es wäre im Verzeichnis system32 nicht) und dann syswow64 \ regsvr32 explizit aufrufen, zB

c: \ windows \ syswow64 \ regsvr32 yourdll.dll

btw würde es nicht funktionieren, wenn c Aufruf: \ Windows \ syswow64 \ regsvr32 c: \ Windows \ syswow64 \ yourdll.dll

6

Dies ist nicht wahrscheinlich, b Das Problem in Ihrem Fall, aber möglicherweise nützlich für andere, die diese Frage durch die Suche nach der gleichen Fehlermeldung finden:

Ich hatte ein ähnliches Problem: eine DLL, die weder mit der 32-Bit-oder 64 registriert -Bit-Version von RegSvr32. Ich lud die DLL den Dependency Walker (depends.exe, http://www.dependencywalker.com/) und erhielt eine viel nützlichere Nachricht:

Fehler: Mindestens eine Datei war kein 32-Bit- oder 64-Bit-Windows-Modul.

Beim Scannen der CPU-Spalte in der Modulliste wurde das betreffende Modul identifiziert. (In meinem Fall hieß es "Keine DOS- oder PE-Signatur gefunden. Diese Datei ist kein gültiges 32-Bit- oder 64-Bit-Windows-Modul.")

Moral: Der Dependency Walker könnte Ihnen eine nützlichere Fehlermeldung geben als RegSvr32.exe.

+0

Dies zeigte die Ursache des Problems für mich. Mein Pfad war so, dass eine 64-Bit-DLL anstelle der 32-Bit-Version geladen wurde. – Armbie

1

Ich habe das gleiche Problem, aber ich es \ syswow64 regsvr32 c mit Befehlen

CD \ windows beheben: \ Dateiname. dll

0

Verwenden Sie Process Monitor von SysInternals.

1. Filtern nach "Prozessname" = regsvr32.exe. Filter

2. Versuchen Sie, Ihre DLL von der richtigen Version von regsvr32.exe zu registrieren (die 32-Bit-Version befindet sich im SysWow64-Ordner)

3. Der Prozessmonitor zeichnet ALLES auf, was auf Ihrem Computer passiert.

4. Starten Sie zuerst Ihre Analyse, indem Sie die Registrierungsereignisse (vorerst) entfernen enter image description here

5. Sie können sehen, dass die DLL gefunden wurde und nicht gefunden wird.

hier ein (sehr) Teil SCREENSHOT von regsvr32.exe von Threed32.ocx wo wir enter image description here

6 einen Teil der erforderlichen DLL sehen. Deine Arbeit fängt gerade an. In.

1

Ausführen der Eingabeaufforderung als Administrator mein Problem behoben.

Verwandte Themen