[DllImport]を使用してネイティブのサードパーティライブラリをロードするインプロセスのwmiプロバイダーに取り組んでいます。dllの場所はc:\mydllpathに固定されています。dllをロードする前に、プロバイダーのBind()メソッドで現在のディレクトリをdllの場所に設定しました。
Environment.CurrentDirectory = Environment.ExpandEnvironmentVariables( "%SystemDrive%")+ "\ mydllpath";
プロバイダーは「任意のCPU」用に構築され、gacutilおよびinstallexeを使用してインストールされます。
gacutil.exe / if myprovider.dll
installutil.exe myprovider.dll
すべての32ビットWindowsプラットフォームで正常に動作しています。しかし、64ビットプラットフォーム(Windows 7 64ビットで試してみました)では、WMICからテストすると機能しません。しかし、WMIコードクリエーターでテストしたところ、正常に機能していました。
デバッグした後、次のエラーがスローされていることがわかりました。
System.BadImageFormatException追加情報:誤った形式のプログラムを読み込もうとしました。(HRESULTからの例外:0x8007000B)
インターネットからヘルプを検索した後、x86のプロバイダーを構築することが提案されました。しかし、x86で構築されたプロバイダーは次のような別のエラーを出します...
エラー:コード=0x80041013説明=プロバイダーの読み込みエラー機能=WMI
また、/ linkrefコマンドラインスイッチを使用してネイティブdll(実際には2つのdllとsysファイル)を読み込もうとしましたが、/linkrefを使用してsysファイルを読み込めなかったため失敗しました。
テスト用のC#クライアントアプリケーションを作成し、すべてのファイルを同じパスに保持しましたが、正常に機能していました。64ビットインストール用のいくつかの構成が欠落していることを願っています。
どんな助けでも本当にありがたいです、そして前もって非常に感謝します!