2010-08-23 2 views
0

불행히도이 질문은 끝내지 않을 것입니다.하지만 저는 지혜로 끝나고 조언을 구할 것이라고 생각했습니다.LoadLibrary 모듈을 찾을 수 없음 - Office 2007을 설치 한 후에 DLL 지옥이 발생합니다.

이것은 Visual Studio 2008 SP1을 사용하는 Visual C++ MFC 응용 프로그램입니다.

직장 동료와 나는 Office 2007을 모두 설치 했으므로 이후로 우리 응용 프로그램에 이상한 DLL 로딩 문제가 발생했습니다. 특히, LoadLibrary는 DLL (첫 번째로드)과 오류 코드 126 (모듈을 찾을 수 없음) 중 하나를로드하지 못했습니다. 정말 이상한 점은 Windows 탐색기에서 실행 파일을 실행하면 제대로 작동한다는 것입니다.

나는 문제를 진단하는 일반적인 단계에 나섭니다 :

  1. 파일이 존재하는 것이 현재 작업 디렉토리가 그것을 지적되었는지 확인합니다.
  2. 종속성 워커를 실행하고 종속성이 올바르게로드되는지 확인하십시오. 그들은 모두 this question이 실패 할 것이라는 말을 제외하고는 모두로드됩니다.
  3. 코드의 동일한 위치에 다른 DLL을로드하여 실험하십시오. 간단한 '스텁'dll 중 일부는 성공하지만 대부분 실패합니다.
  4. 별도의 테스트 앱에서 실패한 DLL로드 실험 - 빈 콘솔 앱과 베어 본 MFC 앱에서 모든 DLL이 정상적으로로드 중입니다!
  5. LoadLibraryEx와 LOAD_LIBRARY_AS_DATAFILE 플래그로 DLL을로드 해 봅니다.이 플래그는 성공하지만 아마도 종속성 문제 일 가능성이 높습니다.

나는이 시점에서 무엇을해야할지 모르겠습니다. 제가 말씀 드렸듯이, Office 2007은 우리 문제의 공통점을 가지고 있지만, 어떤 문제가 생길지 모릅니다. 나는 정말로 다음 단계를 취할지조차 모른다. 어떤 아이디어?

편집 : 현재 작업 디렉토리가 어떤 이유로 DLL 경로에없는 것은 확실합니다. 실패하고있는 DLL은 다른 DLL이 필요한 DLL 인 것 같습니다. Loader Snaps 디버그 출력을 켜면 현재 작업 디렉토리가 DLL 로딩 경로에없는 것 같습니다. 어떤 아이디어가 이것을 일으킬 수 있습니까?

edit2 : 현재 빌드가 실행 파일을 작업 디렉토리가 아닌 다른 디렉토리로 덤프했습니다. 어떤 이유로 DLL을로드하려고 시도 할 때 다른 DLL을로드하려고 시도하면 현재 작업 디렉토리는 더 이상 검색되지 않습니다. 로드하려고하는 모든 DLL이있는 디렉토리에 실행 파일을 저장하면 문제가 해결됩니다. 이 모든 것을 기반으로하고 로더 스냅에 의한 결과를 바탕으로 98 %가 약간의 기괴한 Visual Studio 버그임을 확신하며 간단히 해결해야 할 것입니다.

답변

1

Office 2007에서 레지스트리의 SafeDllSearchMode를 켭니다. SafeDlLSearchMode와

http://msdn.microsoft.com/en-us/library/ms682586%28VS.85%29.aspx

는 현재 디렉토리는 더 이상 검색되지 않습니다. 이 기능을 사용하지 않으려면 regedit에 들어가서 HKLM/System/CurrentControlSet/Control/SessionManager/SafeDllSearchMode를 0으로 설정할 수 있다고 주장합니다. 그러나 이것은 나에게 도움이되지 못합니다. SetDllDirectory를 현재 디렉터리로 호출하면 DID가 작동하지만 XP SP1 +를 대상으로하는 경우에만 작동합니다.

내 응용 프로그램에서이 문제가 발생하는 이유는 디버거에서 실행 파일을 실행할 때 다른 모든 빌드 파일과 함께 현재 디렉터리와 다른 디렉터리에 실행 파일을 보관한다는 것입니다. Visual Studio 외부에서 실행할 때 먼저 실행 파일을 다른 모든 DLL이있는 디렉터리에 복사합니다. 원본 실행 파일이 호출 된 디렉토리는 검색 경로에 항상 있기 때문에 실행 파일과 dll을 함께 보관하면이 문제가 발생하지 않습니다.

여전히 Microsoft에서 이와 같이 dll 검색 경로를 변경하는 것은 매우 혼란 스럽습니다.

0

실패한 DLL은 MSVCRT80이 종속되어 있습니까? 그렇다면 Office 2007이 MSVCR80.dll을 재정의했습니다.

+0

이것은 내가 원래 제공 한 정보에 기초한 합리적인 추측이지만 경로 혼합/버그를로드하는 것과 관련하여 더 많은 정보를 편집했습니다. –

관련 문제