Windows Vista : DLL 'x.dll'을로드 할 수 없음 : 메모리 위치에 대한 액세스가 잘못되었습니다.(DllNotFoundException)

StackOverflow https://stackoverflow.com/questions/29284

문제

저는 오늘 오후에 Windows Vista가 설치된 고객의 상자에서 테스트하고있었습니다 (그는 집에 있었지만 동일한 결과를 가진 Business Edition에서 테스트 중입니다).

우리는 컴퓨터의 하드웨어 ID를 가져 오는 .DLL을 사용합니다. 사용법은 매우 간단하고 내가 만든 샘플 프로그램이 작동합니다. Dll은 AzSdk에서 제공 입니다. 실제로 이것은 Windows XP에서 완벽하게 작동합니다. 그러나 이상한 이유로 프로젝트 내에서 (훨씬 더 큰) 다음 예외가 발생합니다. 라코 디스

폴더를 완전히 제어 할 수 있기 때문에 문제의 원인을 모르겠습니다. 이 프로젝트는 c # .net Windows Forms 응용 프로그램이며 외부 라이브러리에 대한 호출을 제외하고 모든 것이 잘 작동합니다.

다음과 같이 선언합니다. (참고 : COM 라이브러리가 아닌 등록 할 필요가 없습니다.) 라코 디스

그리고 호출 코드는 매우 간단합니다. 라코 디스

샘플 응용 프로그램을 만들면 작동하지만 내 프로젝트에서는 작동하지 않습니다. XP에서 잘 작동합니다. 이 작업을 수행하려면 Vista에서 무엇을해야하는지에 대한 아이디어가 있습니까? 앞서 말했듯이 폴더와 하위 폴더에는 "Everybody"에 대한 모든 권한이 있습니다.

업데이트 : Vista SP 1이 설치되어 있지 않습니다.

업데이트 2 : Vista SP1을 설치했는데 UAC가 비활성화 된 상태에서 간단한 샘플도 작동하지 않습니다 !!! :( 젠장 비스타.

도움이 되었습니까?

해결책

@ 마르틴

UAC 프롬프트가 표시되지 않는 이유는 UAC는 프로세스가 시작 되는 방식 만 변경할 수 있기 때문입니다. 프로세스가 실행되면 동일한 고도 수준을 유지해야합니다. 다음과 같은 경우 UAC 메시지가 표시됩니다.

다른 팁

<인용구>

DLL 'HardwareID.dll'을로드 할 수 없음 : 메모리 위치에 대한 액세스가 잘못되었습니다. (HRESULT 예외 : 0x800703E6)

DllNotFoundException의 이름이 혼란 스럽습니다. 이것은 DLL 파일을 찾거나로드하는 데 문제가되지 않습니다. 문제는 DLL이로드 될 때 잘못된 메모리 액세스를 수행하여로드 프로세스가 실패한다는 것입니다.

여기에있는 다른 포스터와 마찬가지로 이것은 DEP 문제이며 UAC 등의 변경으로 인해 마침내이 응용 프로그램에 대해 DEP를 비활성화 할 수있었습니다.

코드가있는 머신이 64 비트 머신에 배포되어 있습니까? DEP 문제가 발생할 수도 있습니다.

수정 <인용구>

1 세대 Core Duo 2 Intel 프로세서가 장착 된 1 세대 Macbook Pro입니다. 64 비트와는 거리가 멀다.

64 비트를 언급했는데, 낮은 수준에서는 32 비트에서 64 비트까지의 구조체가 제대로 처리되지 않기 때문입니다. 시스템이 64 비트가 아니기 때문에 DEP를 비활성화하는 것이 논리적으로 좋은 다음 단계 일 것입니다. Vista는 XP SP2보다 더 안전했습니다. <인용구>

글쎄요, 저는 전 세계적으로 DEP를 꺼서 아무 소용이 없도록했습니다. 같은 오류입니다.

저는 또한 사람들이 Vista SP1로 컴퓨터를 업데이트 한 후이 오류가 발생한다고 읽었습니다. 이러한 Vista 설치에 SP1이 있습니까? <인용구>

완전히 다른 것으로 밝혀졌습니다. 테스트를 위해 UAC를 비활성화했습니다 (참고 : 메시지가 표시되지 않았습니다).

좋습니다. 실제로 제안하려고했지만 이미 시도해 보셨을 것 같습니다.

공급 업체에 지원 요청을 했습니까?MacBook Pro 하드웨어에 제품 작동을 방해하는 무언가가있을 수 있습니다.

<인용구> <인용구>

"모든 사람"에게 모든 권한을 허용하는 것 외에도 위치에서 중간 무결성 수준의 프로세스를 쓸 수 있습니까?

어떻게 확인하나요?저는 Vista를 처음 접했고 너무 좋아하지 않습니다. 일상적인 작업에는 VM 내부가 너무 느리고 가상 머신 내부의 VStudio 사용에는 새로운 것이 없습니다.

명령 프롬프트에서 다음을 실행할 수 있습니다. 라코 디스

"필수 레이블 \ 높은 필수 수준"과 같은 줄이 표시되면 높은 무결성 프로세스에서만 폴더에 액세스 할 수 있습니다.그러한 행이 없으면 액세스를 거부하는 다른 ACL (예 : 사용자 기반)이 없으면 중간 무결성 프로세스가 액세스 할 수 있습니다.

편집 : / setintegritylevel 스위치를 사용하여 실제로 개체에 액세스하는 데 필요한 무결성 수준을 변경할 수 있음을 언급하는 것을 잊었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top