2009-05-29 3 views
0

Hier ist mein Problem laufen:32-Bit-Anwendung nicht auf x64 Win2003 aufgrund

ich eine Anwendung entwickelt, die auf verschiedenen Plattformen ausgeführt werden können, einschließlich Windows und Unix. Diese App läuft gut auf reinen Win32-Box (WinXP) oder eine reine Win64 (Win2K3 x64 Edition) und andere Unix-Plattformen.

Es schlägt nur fehl, wenn auf einem 64-Bit-Win2K3 im 32-Bit-Modus ausgeführt wird. Diese App ruft zur Laufzeit eine Drittanbieter-DLL auf. Und die Drittanbieter-DLLs werden nicht offiziell installiert, sondern nur an einen Speicherort in derselben Umgebung kopiert. Ich bin mir auch sicher, dass ich die richtige Version dieser 3rd-Party-DLLs habe (ich meine 32-Bit-Version für den 32-Bit-Modus). Auch wenn ich in dieser Testbox den "Pfad" manuell gesetzt habe, funktioniert es immer noch nicht. Die App ist kompiliert und im 32-Bit-Modus in dieser Win2K3-Box gebaut.

Ich laufe die Abhängigkeit walker und sehe den gleichen Fehler. Kann diese Drittanbieter-DLL nicht finden.

Kann jemand etwas Licht darauf werfen? Wie kann ich den Pfad zu dieser Drittanbieter-DLL für meine App oder das System sichtbar machen?

+0

im Abhängigkeits-Walker, ist es nicht in der Lage, die ganze dll selbst zu finden oder es beschwert sich über einige Methoden nicht vorhanden ist? – Naveen

+0

es beschwert sich, dass die ganze dll nicht gefunden werden kann. – awatto

Antwort

1

Ich würde Ihnen vorschlagen, Folgendes zu tun:

  • sicherzustellen, dass Sie 32-Bit- Version der problematische DLL mit 32-Bit-app
  • Verwendung filemon zu sehen, welche Wege Ihre Anwendung verwenden versucht, beim Laden dass DLL
  • prüfen, ob es, wenn Sie platzieren, die DLL in einer dieser Pfade
  • Verwendung Dependency walker mit dieser DLL arbeitet selbst - es könnte seine eigenen ungelösten Abhängigkeiten
+0

Danke für die Vorschläge. Ich kopierte die 3rd-Party-DLLs in das Arbeitsverzeichnis. Aber das Problem existiert immer noch. Mit Abhängigkeit walker, es sieht aus wie die 3rd-Party-DLL fehlt ihre Abhängigkeiten, wie MFC80.dll, etc. Allerdings fehlen diese fehlenden Dateien im System, aber mit zwei Versionen, eine für x86 und eine für x64. Es könnte die 3rd-Party-DLL verwirren. Frage, ist es möglich, Pfad explizit auf Win2K3 x64 zu 32-Bit-Anwendungen zu starten? Ich setze die Umgebungsvariablen wie "PATH", aber scheint nicht zu funktionieren. – awatto

+0

Ihre DLL ist mit vs2005 gebaut, die tatsächlich zwei Versionen der Laufzeit hat - pre-sp1 und sp1 (jede Bibliothek würde eine eigene Version haben, so dass es mehrere Versionen derselben Bibliothek gibt). Die von einer DLL benötigte konkrete Laufzeitversion sollte (höchstwahrscheinlich) im eingebetteten Manifest innerhalb der DLL definiert sein. Versuchen Sie, in das Manifest zu schauen (wie hier beschrieben http://stackoverflow.com/questions/420852/reading-an-applications-manifest-file) und sehen Sie, ob Sie entsprechende Versionen von Visual Studio DLLs in System \ WinSxS haben. Wenn nicht, müssen Sie eine entsprechende Laufzeitumverteilung installieren. – Andrey

+0

Danke für diese Info. Ich werde versuchen, das zu untersuchen. BTW, unsere App wurde mit VS 2003.Net auf 64-Bit-Windows für 32-Bit-Edition gebaut und mit VS 2005 für 64-Bit-Edition gebaut. Macht es einen Unterschied in Bezug auf die Suche nach der richtigen DLL zu laden? – awatto

0

WOW64 haben leitet alle Anrufe, die von 32-Bit-Anwendungen in den System32-Ordner in den Ordner SysWOW64. Ist die Drittanbieter-DLL im Ordner system32? Weil der System32-Ordner im Gegensatz zu dem, was Sie erwarten würden, NUR 64-Bit-DLLs unter Windows x64 enthält.

+0

Unsere Drittanbieter-DLLs werden in einem eigenen Ordner abgelegt.Aber diese DLLs sind nicht registriert. Sie werden einfach an diesen Ort kopiert. Sie werden nicht über ein Installationsprogramm installiert. – awatto