我正在开发一个进程内 wmi 提供程序,它使用 [DllImport] 加载本机第三方库。dll 位置固定为 c:\mydllpath。在加载 dll 之前,我在提供程序的 Bind() 方法中将当前目录设置为 dll 位置。
Environment.CurrentDirectory = Environment.ExpandEnvironmentVariables("%SystemDrive%") + "\mydllpath";
Provider 是为“任何 CPU”构建的,使用 gacutil 和 installexe 安装。
gacutil.exe /if myprovider.dll
installutil.exe myprovider.dll
它在所有 32 位 Windows 平台上运行良好。但是在 64 位平台中(尝试使用 Windows 7 64 位),当我从 WMIC 测试时它不起作用。但是当我使用 WMI Code creator 进行测试时,它运行良好。
调试后我发现它抛出了以下错误。
System.BadImageFormatException 附加信息:尝试加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)
在网上搜索帮助后,建议为 x86 构建提供程序。但是使用 x86 构建的提供程序给出了另一个错误,例如...
错误:代码 = 0x80041013 描述 = 提供程序加载失败设施 = WMI
我还尝试使用 /linkref 命令行开关加载本机 dll(实际上是 2 个 dll 和一个 sys 文件),但由于无法使用 /linkref 加载 sys 文件而失败。
我编写了一个测试 C# 客户端应用程序并将所有文件保存在同一路径中,它工作正常。我希望我缺少一些 64 位安装的配置。
任何帮助将不胜感激,并在此先感谢!