Windows Vista : DLL 'x.dll'을로드 할 수 없음 : 메모리 위치에 대한 액세스가 잘못되었습니다.(DllNotFoundException)
-
09-06-2019 - |
문제
저는 오늘 오후에 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 메시지가 표시됩니다.
- Vista는 설치 프로그램이라고 생각합니다 ( 여기에 많은 규칙 , 가장 간단한 방법은 "setup.exe"),
- "관리자 권한으로 실행"플래그가 지정된 경우 (바로 가기 또는 exe의 속성을 변경하여 편집 할 수 있음) 또는
- exe에 관리자 권한을 요청하는 매니페스트가 포함 된 경우
처음 두 가지 옵션은 UAC 이전에 있었던 '레거시'응용 프로그램에 대한 해결 방법입니다. 새 응용 프로그램에 대한 올바른 방법은 필요한 권한을 요청하는 매니페스트 리소스를 포함 합니다.
Process Explorer 와 같은 일부 프로그램은 실행중인 프로세스 (이 경우 파일 메뉴에서 "모든 프로세스에 대한 세부 정보 표시"를 선택하는 경우) 그러나 실제로 수행하는 작업은 새 인스턴스를 시작하는 것입니다. 원래 실행 중이던 인스턴스가 아닌 새 인스턴스가 상승하는 것입니다. 이는 애플리케이션의 일부에만 권한 상승이 필요한 경우에 권장되는 방법입니다 (예 : 특수 '관리 옵션'대화 상자).
다른 팁
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 하드웨어에 제품 작동을 방해하는 무언가가있을 수 있습니다.
예외가 DllNotFoundException 인 경우 종속성 워커 Vista 설치에 개발 도구를 설치하기 전에 실제로 종속성이 누락되었는지 확인하십시오.
"모든 사람"에게 모든 권한을 허용하는 것 외에도 위치에서 중간 무결성 수준의 프로세스를 쓸 수 있습니까?
어떻게 확인하나요?저는 Vista를 처음 접했고 너무 좋아하지 않습니다. 일상적인 작업에는 VM 내부가 너무 느리고 가상 머신 내부의 VStudio 사용에는 새로운 것이 없습니다.
명령 프롬프트에서 다음을 실행할 수 있습니다. 라코 디스
"필수 레이블 \ 높은 필수 수준"과 같은 줄이 표시되면 높은 무결성 프로세스에서만 폴더에 액세스 할 수 있습니다.그러한 행이 없으면 액세스를 거부하는 다른 ACL (예 : 사용자 기반)이 없으면 중간 무결성 프로세스가 액세스 할 수 있습니다.
편집 : / setintegritylevel 스위치를 사용하여 실제로 개체에 액세스하는 데 필요한 무결성 수준을 변경할 수 있음을 언급하는 것을 잊었습니다.