DllImport System generiert.DllNotFoundException
Ich habe einige Schwierigkeiten beim Versuch zu konsumieren, ein unmanaged-code dll
aus meiner Anwendung (geschrieben in C# framework 4.0).
Ich bin mit der dll
import wie folgt
[DllImport(@"C:\MGW_SDK.dll", EntryPoint = "fInicializaSDK")]
public static extern int fInicializaSDK();
Komisch ist, dass beim Aufruf von meine Entwicklungsumgebung (Windows XP) funktioniert es Prima, aber wenn Sie auf den Produktions-server (Windows7), erzeugt es die folgende Ausnahme:
System.DllNotFoundException
: Unable to load DLL' C:\MGW_SDK.dll'
: Das angegebene Modul konnte nicht gefunden werden. (Ausnahme von HRESULT: 0x8007007E) beiComtpaq.AdminPack.SDKWrapper.fInicializaSDK()
beiComtpaq.AdminPack.AdminPaqRepository.InitializeSDK()
imC:\Work\AgroIn\AdminPaqRepository.cs
:Linie 30
Ich schon lief Dependency Walker, das zeigt die folgende Abhängigkeit als Konflikt: C:\windows\system32\SHLWAPI.DLL
Ich schon versucht, das kopieren, die dll
zu meinem deployment-Verzeichnis
Den MGW_SDK.dll
ist auf c:\
(als Pfad sagt)
Habe ich bereits installiert C-Runtime-Bibliothek
Habe ich auch bemerkt, einige interessante Dinge: auf die Ausnahme, die Entwicklung Weg zeigt C:\Work\AgroIn\AdminPaqRepository.cs:line 30
Was könnte hier das problem?
Bearbeiten
Baute ich eine kleine Konsole-Anwendung mit nur einer der extern
/dllimport
Methoden, die ich benutze, von MGW_SDK.dll
und es lief ohne Probleme (keine DllNotFoundException
auch immer), so scheint dies im Zusammenhang mit der Anwendung, die ich Baue (WCF Service). Dieser service wird gehostet WURDE, aber ich bin immer noch nicht finden das Problem.
ja, beide Betriebssysteme 32-bit-und Sie sind zusammengestellt als AnyCPU, die Anwendung selbst funktioniert, ist gerade diese Komponente, die mich Schmerzen.
Welche app ist es? Desktop, ASP .NET?
Das ist eigentlich ein WCF-Dienst
Haben Sie versucht,, um alle erforderlichen Dll-Dateien in Ihrem app-Ordner? Nur um sicherzustellen, dass es diese finden kann.
InformationsquelleAutor Bongo Sharp | 2010-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, dies war ein sehr heikles problem. Es war nicht im Zusammenhang mit dll-Abhängigkeiten und nicht mit der dll Lage. Es ging nicht darum, wie ich den Aufruf der
DllImport
. Es war ein Berechtigungen-problem.Grundsätzlich dieses Problem wird gelöst durch die Aufnahme und fügt dann wieder die Berechtigungen, die zum ausführen in den Ordner, wo die dlls sind. Sehen dieser Artikel (Wayback machine).
InformationsquelleAutor Bongo Sharp
Den root von C ist einer der Orte, die UAC wird nicht lassen Sie zu schreiben. Manchmal unmanifestierten apps, die Fragen zu Lesen aus einem geschützten Bereich am Ende der Lektüre, aus der virtualisierten entspricht - und Ihren DLL wird nicht da sein. Bewegen Sie den DLL in ein anderes Verzeichnis (nicht dem Stammverzeichnis von C, nicht alles, was unter Program Files) und sehen, ob das löst es. Wenn es funktioniert, können Sie es dort lassen oder (besser) setzen ein manifest auf, Ihre app um zu verhindern, dass die Virtualisierung.
InformationsquelleAutor Kate Gregory
Haben Sie versucht, mit Assembly Binding Log Viewer?
Kann nicht sicher sein. Ich googelte herum, aber ich fand keine Einträge, die angeben, entweder es funktioniert oder nicht, für P/Invoke-Bibliotheken. Einen Versuch Wert, denke ich.
ich habe es auf, wo ich den service haben, zeigt aber keine Informationen, jedoch wenn ich es auf dem client-es zeigt die Prozesse... braucht es ein Fenster zum einloggen? wie wäre WCFs?
InformationsquelleAutor Dan Abramov
Weiß nicht, ob dies funktionieren wird, für sicher, aber Sie haben versucht, die Registrierung MGW_SDK.DLL mit regsrv32 oder andere Installations-Paket auf Win7-box?
Versuchen Sie auch, um herauszufinden, ob die Abhängigkeiten der MGW_SDK.DLL sind auch auf Win7-Computer (entweder angemeldet am system oder in Ihrer Anwendung Ordner funktionieren)
wahrscheinlich ist es die Nutzung von XP-spezifischen version des Shell-API. versuchen Sie einen rechten Mausklick und die Einstellung seiner Kompatibilität Modus auf XP oder Kontaktieren Sie den Eigentümer/Herausgeber MGW_SDK.dll um aktualisierte version.
ich rechts geklickt, aber ich habe nicht gefunden den Kompatibilitätsmodus
InformationsquelleAutor TheVillageIdiot