我正在开发一个进程内的WMI提供程序,使用[DllImport]加载本地第三方库。dll文件位置固定在c:\ mydllpath。在加载dll之前,在提供程序的Bind()方法中将当前目录设置为dll位置。
Environment.CurrentDirectory = Environment.ExpandEnvironmentVariables(“%SystemDrive%”)+“\ mydllpath”;
提供程序是为“Any 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位安装的某些配置。
非常感谢您提供任何帮助!
Environment.CurrentDirectory = Environment.ExpandEnvironmentVariables(“%SystemDrive%”)+“\ mydllpath”;
提供程序是为“Any 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位安装的某些配置。
非常感谢您提供任何帮助!