다른 프로세스에 주입 된 CBT 후크가 있으며 이전에 정상적으로 작동하고있었습니다. 이 CBT 후크는 C++/CLI DLL로 작성되며 C# DLL을 참조합니다. 이 C# DLL에는 C++/CLI DLL의 x86 및 x64 빌드에 공통된 유형이 포함되어 있기 때문에 필요합니다. 그러나 CBT 후크가 작동하지 않아 C# DLL을 찾을 수 없다고 주장했습니다. 이로 인해 CBT 후크가 주입 된 모든 프로그램이 즉시 중단됩니다. 이전에는 없었습니다.CBT 후크에 여러 DLL이 있음
BinaryFormatter
및 명명 된 파이프를 사용하여 후크 프로 시저에서 데이터를 이전 프로세스로 다시 전송했기 때문에 직렬화를 돕기 위해 공통 유형을 C# DLL로 옮겼습니다. 주입되는 공정의 주소 공간.
내 질문은 어떻게 C# DLL을 런타임에 후크 프로 시저에서 찾을 수 있습니까? C# DLL과 C++/CLI DLL은 같은 디렉터리에 있습니다.
예외 형식 'System.IO.FileNotFoundException'처리되지 않은 예외가 IvyLock.Native.dll 에서 발생
추가 정보 (이 내 C++/CLI의 DLL의 86 변종) : 수 파일 또는 어셈블리 'IvyLock, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = ...'또는 해당 종속성 중 하나를로드하지 마십시오. 시스템이 지정된 파일을 찾을 수 없습니다. 이것은 IvyLock.Native.dll과 같은 디렉토리에 내 C#의 DLL입니다
참고 : 모든 것이 단순히 중독되는 프로세스와 동일한 디렉토리에 IvyLock.dll를 복사하면 완벽하게 작동하지만,이 분명히 글로벌 훅으로 확장 할 수 없으며,이 애플리케이션이 제대로 작동하려면 크로스 아키텍처 글로벌 훅이 필요합니다. IvyLock.dll이 검색되는 경로를 변경하면 문제가 완화 될 것이라고 추측합니다. 어떻게해야합니까?
주 2 : GAC에 IvyLock.dll 추가는 문제를 해결하고, 훨씬 더 확장 성이 있지만, 관리자 액세스를 필요로 잠재적 열심히 배포, 나는 IvyLock를 업데이트 할 때마다 할 수있는 고통이다 .dll. 가능하다면이 해결책을 피하고 싶습니다.
(프로젝트 속성에서 구성 가능한) IvyLock.dll을 지연 시키도록 설정 한 경우 절대 경로를 사용하여 'LoadLibrary'를 실행하면 문제를 해결할 수 있습니다 (내 생각 엔) – xanatos
여기의 문제는 dll에 대한 검색 경로는 앱의 기본 디렉토리이며 dll2를로드하는 dll1과 함께 app1, dll1, dll2가있는 경우 검색 경로는 여전히 dll1의 경로가 아닌 app1의 경로입니다. – xanatos
기다려 ... 내 오류 ... .NET 어셈블리의 로딩을 리디렉션하고 싶습니다. http://stackoverflow.com/a/1373295/613130을 사용하십시오. (따라서'AppDomain.CurrentDomain.AssemblyResolve' 이벤트를 사용하십시오.). 다른 솔루션은 C++ (순수) 솔루션이 있고 C++/CLI 어셈블리를로드하려는 경우에 좋았습니다. – xanatos