2012-02-25 3 views
2

x64 코드로 컴파일되지만 x64 코드로 별도의 버전으로도 컴파일되는 응용 프로그램이 있습니다. 이 응용 프로그램은 기본적으로 C# 관리되는 exe와 C++ 관리되지 않는 dll의 두 부분으로 구성됩니다. 나는 후자에 문제가있다. 내 개발 PC (Windows 7 64 비트, Visual Studio 2008)에서는 배포 프로젝트로 설치 프로그램을 만들고이 설치 프로그램은 프로그램 파일에 응용 프로그램을 설치합니다. 나는 또한 시험용 PC (Windows 7 64-bit)를 가지고있다. 거기에 응용 프로그램이 여전히 프로그램 파일에 설치되지만 실행되지 않습니다. 관리되지 않는 DLL의 함수 (모든 함수)가 호출 될 때 BadImageFormatException이 발생합니다. 문제는 dll을 생성하는 내 자신의 프로젝트도 상당히 자유롭게 사용할 수있는 라이브러리 (예 : glew32, openal, freeimage 등)를 사용한다는 것입니다. 이러한 x64 버전을 사용할 수 있도록 많은주의를 기울였습니다. 라이브러리가 있지만 여전히 잘못된 것이 있어야합니다. 어떤 이유로 든 내 DLL에서 사용하는 라이브러리 중 하나가 테스트 PC에서 x64 코드로 사용할 수 없지만 개발 PC에 있습니다. 적어도 내 설정이 개발 PC에서는 작동하지만 테스트 PC에서는 작동하지 않는 유일한 설명입니다. 내 질문은 : 어떻게 문제가 있는지 알 수 있습니다. 받은 오류 메시지가 도움이되는 세부 정보를 제공하지 않습니다. 나는 의존하고 내 dll을 분석하려했지만 괜찮아 보입니다. 그것은 의존 라이브러리를 X86 (아마도 이것은 시스템 파일 일 것입니다)으로 나열하지만, ​​의도적으로 사용하는 모든 라이브러리는 x64로 나열됩니다. 내 테스트 PC의 Windows가 x64이어야하더라도 x86 코드로 DLL을 실행하려고하는 이유를 테스트 할 방법이 있습니까? 감사합니다. .기본 x64 dll이 작동하지 않습니다.

뭔가 이상한 것으로 나타났습니다. x64 응용 프로그램 용이므로 응용 프로그램 파일 폴더에 내 응용 프로그램을 배포하고 있지만 실행에 실패했습니다. 그러나 설치된 폴더에있는 모든 파일을 다른 폴더 (Documents 폴더 내부)에 복사하면 응용 프로그램이 완벽하게 실행됩니다.

+2

SysInternals 'ProcMon 유틸리티를 사용하여 정확히 어떤 DLL이 있는지 확인하십시오. –

답변

0

문제를 진단 할 컴퓨터에서 Fusion Log Viewer을 실행하십시오. 로그를주의 깊게보고 어떤 DLL이로드되고 있는지 그리고 어디에서 왔는지 정확하게 알 수 있습니다.

+0

이것은 .net 어셈블리를위한 것 같아요 문제는 관리되지 않는 DLL입니다. 그럼에도 불구하고 융합 로그 뷰어를 사용했는데 목록에 항목이 없습니다. – aronsatie

+0

네이티브 dll도 포함하므로 설정을 조정해야합니다. 나는 또한 혼합 된 솔루션을 가지고 있으며 성공적으로 이것을 과거에 사용했습니다. 또한 바인드 실패를 기록하도록 지시해야합니다. 곧 블로그 게시물을 올릴 수도 있습니다. –

+0

설정을 조정하는 방법에 대해 자세히 설명해 주시겠습니까? 감사. – aronsatie

0

Any CPU 구성으로 .NET 실행 파일 (DLL)을 빌드하고 Win32/x64 용 x64/Win32 기본 DLL (예 : 잘못된 구성)을 제공했습니다.

  • x64 시스템에서 .NET 바이너리는 기본 DLL이 x64 인 것처럼 기본 DLL을로드하려고 시도합니다.
  • 32 비트 시스템에서는 32 비트 기본 DLL을로드하려고 시도합니다.
+0

아니요, 저는 C# exe와 관리되지 않는 C++ dll을 x64로 구축했습니다. – aronsatie

0

답변을 찾았습니다. 문제는 64 비트 dll이 아닙니다. 라이브러리 중 하나는 만들지 못했지만 (아직 어떤 파일이 있는지 모르겠습니다) 파일을 응용 프로그램 폴더에 쓰려고 시도하는 것 같습니다. 물론 관리자 권한으로 응용 프로그램을 실행하지 않는 한 Program Files 폴더에는이 작업이 허용되지 않습니다. 잘못된 질문에 대한 도움을 요청해서 죄송합니다.

관련 문제