2009-09-01 8 views
0

네이티브 C 응용 프로그램에서 호출 된 혼합 모드 DLL이로드되지 않습니다. 알 수없는 모듈에서 처리되지 않은 'System.IO.FileLoadException'예외가 발생했습니다.혼합 모드 네트워크 공유에서 응용 프로그램을 시작할 때 C++ DLL 함수 호출이 실패합니다. 관리되지 않는 C 응용 프로그램에서 호출

추가 정보 : 'XXSharePoint, 버전 = 0.0.0.0, Culture = neutral, PublicKeyToken = e0fbc95fd73fff47'또는 해당 종속성 중 하나를로드 할 수 없습니다. 최소 권한 요청을 부여하지 못했습니다. (HRESULT 예외 : 0x80131417)

내 환경 : C# DLL을로드하는 혼합 모드 C++ DLL을 호출하는 네이티브 C 응용 프로그램. 로컬 드라이브에서로드 될 때 올바르게 작동하지만 네트워크 드라이브에서 시작할 때 올바르게 작동합니다 , 위의 메시지와 함께 실패합니다.

GetProcAddress와 마찬가지로 LoadLibrary에 대한 호출이 성공합니다. 로드 오류는 함수를 호출 할 때 발생합니다.

저는 C 응용 프로그램에 디지털 서명을했으며 2 개의 DLL에 "강력한 이름"서명을 수행했습니다. 위의 메시지에서 PublickKeyToken은 명명 된 DLL과 일치합니다. 또한 FullTrust에 강력한 이름의 keytoken을 부여하기 위해 고객에게 CASPOL 명령을 발급했습니다. 그 작업에 실패하면 CASPOL 명령을 사용하여 FullTrust에 네트워크 드라이브의 URL (응용 프로그램의 디렉토리 경로 포함)을 부여했습니다. 결과에는 변화가 없다.

모든 종속성을 제거 했으므로 초기 혼합 모드 DLL 만있었습니다. 모든 기능의 본문을 "성공"정수 값의 반환으로 바꿨습니다. 결과는 변경되지 않았습니다. 혼합 모드에서 Win32로 변경하고 구성 등록 정보 >> 일반 >> 공용 언어 런타임 지원을 "공용 언어 런타임 지원"에서 "공용 언어 런타임 지원 없음"으로 변경 한 경우에만 DLL을 호출하면 예상 된 결과가 나타납니다 (단지 "성공"정수 반환 값을 반환했습니다.

답변

1

이 공유에서 코드를 실행할 수있는 권한이 없습니다. 나는 당신이 공유에서 어떤. NET 응용 프로그램을 실행할 exen 수 없다고 생각합니다. 그것을 밖으로 시도하고 일부 .NET 실행 파일을 공유에 배치하고 실행 해보십시오. 작동하지 않는 경우 공유를 사용하려면 .net config에 권한을 추가해야합니다.

+0

강력한 이름을 DLL에 추가 한 다음 CASPOL 명령을 사용하여 강력한 이름 인 FullTrust 권한을 클라이언트 컴퓨터에 부여하는 것이 필요합니다. 나는 그 두 가지를 모두했지만 결과는 같았다. – Steve

+0

이것은 서명 문제가 아닙니다. 공유에서 FullTrust를 실행하도록 .NET Framework를 구성해야합니다. 열기 (제어판 ...) 가 런타임 보안 경찰> 코드 그룹에서 추가 .NET Framework 2.0 구성 응용 프로그램의 새로운 코드 그룹 조건 유형 URL 을 선택하고 URL 를 사용하여 귀하의 공유에 대한 경로를 지정 기존의 권한 설정 "FullTrust" 및 작동합니다. 이 코드 그룹을 사용하면 공유 권한을 제어 할 수 있습니다. –

관련 문제