2011-03-17 5 views
3

[DllImport]를 사용하여 원시 타사 라이브러리를로드하는 in-process wmi 공급자에서 작업 중입니다. dll 위치는 c : \ mydllpath로 고정됩니다. dll을로드하기 전에 공급자의 Bind() 메소드에서 현재 디렉토리를 dll loaction으로 설정했습니다.64 비트 OS에서 in-process wmi provider (32 비트)의 native dll (32 비트)로드

Environment.CurrentDirectory = Environment.ExpandEnvironmentVariables ("% SystemDrive %") + "\ mydllpath";

gacutil을 사용하여 설치 한 'Any CPU'및 installexe 용으로 제공됩니다.

하여 gacutil.exe/myprovider.dll

InstallUtil.exe는의 myprovider.dll

그것은 모든 32 비트 Windows 플랫폼에서 잘 작동합니다. 하지만 64 비트 플랫폼 (Windows 7 64 비트 사용)에서는 WMIC에서 테스트 할 때 작동하지 않습니다. 그러나 WMI 코드 작성자로 테스트했을 때 제대로 작동했습니다.

디버깅 후 다음 오류가 발생하는 것으로 나타났습니다.

System.BadImageFormatException 추가 정보 : 잘못된 형식의 프로그램을로드하려고했습니다. (HRESULT 예외 : 0x8007000B)

인터넷에서 도움말을 검색 한 후 x86 용 공급자를 구축하는 것이 좋습니다. 그러나 86 같은 다른 오류를주고있다 빌드 제공 ...

ERROR : 코드 = 0x80041013 설명 = 제공자로드 실패 시설 = WMI

나는 또한 네이티브 DLL을 (실제로이 DLL을로드하려고

, sys 파일)을/linkref 명령 줄 스위치를 사용하지만/linkref를 사용하여 sys 파일을로드 할 수 없기 때문에 실패했습니다.

필자는 테스트 C# 클라이언트 응용 프로그램을 작성하고 모든 파일을 동일한 경로에 유지하므로 정상적으로 작동합니다. 64 비트 설치에서 일부 구성이 누락 되었기를 바랍니다.

어떤 도움을 주셔서 감사 드리며 미리 감사드립니다.

+0

다른 가능성은 ...? : – Muthukkumaran

답변

3

의 일부를 설명하는 문서에서는 64 비트 될 코드가 필요하십니까입니까? Visual Studio에서 C# 코드를 32 비트 실행 파일로 컴파일 한 다음 32 비트 기본 DLL을 사용할 수 있습니다. 이것은 64 비트 OS에서 정상적으로 작동합니다.

. NET은 기본적으로 .net IL을 원시 명령어 세트와 동일하게 컴파일합니다. 빌드 탭의 프로젝트 설정에서 빌드 타겟이 "Any CPU"로 설정되면 64 비트 플랫폼에서는 64 비트, 32 비트 플랫폼에서는 32 비트로 컴파일됩니다.

이것을 변경하고 강제로 32 비트 컴파일 (x86으로 설정)하면 64 비트 플랫폼에서도 32 비트로 컴파일되므로 32 비트 DLL을 사용할 수 있습니다.

업데이트 : 질문을 다시 읽으면 In-process WMI 공급자를 구축하고 있다고 진술했습니다.이것은 제공자가 64 비트 플랫폼에서 64 비트 일 필요가 있음을 나타낼 것입니다 (필자가 잘 모르겠다). 그렇다면, 네 .. 너 운이 없어.

UPDATE2 : This article "희귀 한 경우"를 제외하고 64 비트 OS에서 WMI 공급자가 64 비트 일 필요는 없음을 나타내는 것처럼 보이므로 32 비트 공급자를 사용할 수 있습니다.

+0

많은 Mystere Man 감사합니다. 사용하고 있습니다. 프로세스 공급자. 나는 또한 x 86에 대한 내 공급자를 구축했지만 행운을. 내 클라이언트에서 64 비트 네이티브 dll 기다리고 있습니다. – Muthukkumaran

+0

마지막으로 내 클라이언트가 문제를 해결할 수있는 64 비트 DLL을 제공했습니다. – Muthukkumaran

1

죄송합니다, 행운이 여기 있습니다. 프로세스 (주 프로세스, 시작된 모든 작업)가 64 비트를 실행 중이라면 32 비트 원시 DLL을로드 할 수 없습니다.

here

는 어려움

+0

감사합니다 랄프 우리는 우리의 클라이언트에서 64 비트 dll을 얻으려고 시도합니다. – Muthukkumaran

+0

마지막으로 내 클라이언트가 문제를 해결할 수있는 64 비트 dll을 제공했습니다. 감사합니다 ralf.v – Muthukkumaran

관련 문제