Ich arbeite an einem prozessinternen wmi-Anbieter, der eine native Bibliothek eines Drittanbieters mit [DllImport] lädt. Der Speicherort der DLL ist auf c festgelegt: \mydllpath. Vor dem Laden der DLL habe ich in der Bind()-Methode des Anbieters das aktuelle Verzeichnis auf die DLL-Aktion gesetzt.
Environment.CurrentDirectory = Environment.ExpandEnvironmentVariables("%SystemDrive%") + " \mydllpath ";
Der Provider ist für 'Any CPU' gebaut und wird mit gacutil und installexe installiert.
gacutil.exe /if myprovider.dll
installutil.exe myprovider.dll
Es funktioniert problemlos auf allen 32-Bit-Windows-Plattformen. Aber auf 64-Bit-Plattformen (versucht mit Windows 7 64bit) funktioniert es nicht, wenn ich über WMIC teste. Aber wenn ich mit WMI Code Creator getestet, es funktionierte gut.
Nach der Fehlersuche stellte ich fest, dass folgender Fehler auftrat.
System.BadImageFormatException Zusätzliche Informationen: Es wurde versucht, ein Programm mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)
Nach der Suche nach Hilfe im Internet wurde vorgeschlagen, den Provider für x86 zu erstellen. Aber Anbieter mit x86 gebaut gibt einen anderen Fehler wie...
ERROR: Code = 0x80041013 Beschreibung = Provider-Ladefehler Einrichtung = WMI
Ich habe auch versucht, die nativen DLLs (eigentlich 2 DLLs und eine Sys-Datei) mit dem Befehlszeilenschalter /linkref zu laden, was aber nicht möglich war, weil die Sys-Datei mit /linkref nicht geladen werden konnte.
Ich schrieb einen Test C#-Client-Anwendung und halten alle Dateien in einem gleichen Pfad, es funktionierte gut. Ich hoffe, ich bin einige Konfigurationen für 64-Bit-Installation fehlt.
Für jede Hilfe wären wir sehr dankbar und bedanken uns im Voraus!