Programing

DLL 종속성을 확인하는 방법?

lottogame 2020. 6. 18. 07:53
반응형

DLL 종속성을 확인하는 방법?


때로는 작은 프로젝트를 수행 할 때 충분히주의하지 않고 실수로 내가 알지 못하는 DLL에 대한 종속성을 추가합니다. 이 프로그램을 친구 나 다른 사람에게 배송 할 때 "일부 DLL"이 없기 때문에 "작동하지 않습니다". 물론 프로그램이 내 시스템에서 DLL을 찾을 수는 있지만 DLL은 찾을 수 없기 때문입니다.

DLL 종속성에 대한 실행 파일을 스캔하거나 "깨끗한"DLL이없는 환경에서 프로그램을 실행하여 이러한 oops 상황 을 방지하는 방법이 있습니까?


Dependency Walker(2006의 마지막 업데이트) 또는이라고 불리는 현대적인 재 작성을 시도하십시오 Dependencies.


dumpbin Visual Studio 도구 (VC \ bin 폴더)에서 도움이 될 수 있습니다.

dumpbin /dependents your_dll_file.dll

나는 리눅스 팬들을위한 흥미로운 솔루션을 추천 할 수있다. 이 솔루션을 살펴본 후 DependencyWalker에서 이것으로 전환했습니다.

lddWindows 관련 exe,을 (를) 통해 즐겨 찾기 사용할 수 있습니다 dll.

이렇게하려면 Windows에 Cygwin (추가 패키지가 필요없는 기본 설치)을 설치 한 다음 시작하면 Cygwin Terminal됩니다. 이제 다음을 포함하여 좋아하는 Linux 명령을 실행할 수 있습니다.

$ ldd your_dll_file.dll

UPD : Windowsldd 에서 git bash 터미널을 통해서도 사용할 수 있습니다 . git이 이미 설치되어있는 경우 cygwin을 설치할 필요가 없습니다.


  1. 시작 버튼을 누르고 "dev"를 입력하십시오. "VS 2017 용 개발자 명령 프롬프트"라는 프로그램을 시작하십시오.

  2. 작업하려는 어셈블리의 전체 파일 경로를 파악하십시오.

  3. 열린 창에서을 입력하십시오 dumpbin /dependents [path]. 여기서 [path]2 단계에서 알아 낸 경로는

  4. Enter 키를 누르십시오

Bam, 당신은 당신의 의존성 정보를 가지고 있습니다. 창은 다음과 같아야합니다.

여기에 이미지 설명을 입력하십시오


  1. "종속"이라는 프로그램이 있습니다
  2. cygwin이 설치되어 있으면 ldd file.exe보다 간단하지 않습니다.

가장 안전한 것은 프로그램을 테스트 할 수있는 깨끗한 가상 머신이 있다는 것입니다. 테스트하려는 모든 버전에서 VM을 초기 깨끗한 값으로 복원하십시오. 그런 다음 설정을 사용하여 프로그램을 설치하고 작동하는지 확인하십시오.

딜 문제는 얼굴이 다릅니다. Visual Studio를 사용하고 CRT에 동적으로 연결하는 경우 CRT DLL을 배포해야합니다. VS를 업데이트하면 다른 버전의 CRT를 배포해야합니다. 의존성을 확인하는 것만으로는 충분하지 않습니다. 깨끗한 기계에 전체 설치를하는 것이 유일한 안전한 솔루션 인 IMO입니다.

완전한 테스트 환경을 설정하지 않고 Windows 7을 사용하는 경우 XP-Mode를 초기 클린 머신으로 사용하고 XP-More 를 사용하여 VM을 복제 할 수 있습니다.


개발 머신에서 프로그램을 실행하고 Sysinternals Process Explorer를 실행할 수 있습니다 . 아래쪽 창에는 여러 가지 이유로 편리한로드 된 DLL과 현재 경로가 표시됩니다. 배포 패키지를 실행하면 잘못된 경로에서 참조되는 DLL이 표시됩니다 (즉, 올바르게 패키지화되지 않음).

현재 우리 회사는 Visual Studio Installer 프로젝트를 사용하여 종속성 트리를 걷고 프로그램을 느슨한 파일로 출력합니다. VS2013에서는 이제 확장명이 https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d 입니다. 그런 다음이 느슨한 파일을보다 포괄적 인 설치 프로그램으로 패키지화하지만 적어도 해당 설정은 모든 닷넷 종속성을 투영하여 한 지점으로 드롭하고 누락 된 경우 경고합니다.


과거 (예 : WinXP 일)에는 DLL Dependency Walker (depends.exe)에 의존하거나 의존했지만, 여전히 DLL 문제를 확인할 수없는 경우가 있습니다. 이상적으로, 우리는 검사를 통해 런타임 전에 알아 내고 싶지만, 그래도 해결되지 않거나 너무 많은 시간이 걸리는 경우 http://blogs.msdn.com/에 설명 된대로 "로더 스냅"을 활성화 할 수 있습니다. b / junfeng / archive / 2006 / 11 / 20 / debugging-loadlibrary-failures.aspxhttps://msdn.microsoft.com/en-us/library/windows/hardware/ff556886(v=vs.85).aspx 간단히 언급 한 LoadLibrary가 실패합니다. GetLastError 도움말 없음

경고 : 과거에 gflag가 무릎을 꿇고 기어 다니면서 Windows를 엉망으로 만들었습니다.

여기에 이미지 설명을 입력하십시오

Note: "Loader snap" is per-process so the UI enable won't stay checked (use cdb or glfags -i)


Please search "depends.exe" in google, it's a tiny utility to handle this.


If you have the source code, you can use ndepend.

http://www.ndepend.com/

It's pricey and does a lot more than analyzing dependencies so it might be overkill for what you are looking for.


NDepend was already mentioned by Jesse (if you analyze .NET code) but lets explain exactly how it can help.

Is there a program/script that can scan an executable for DLL dependencies or execute the program in a "clean" DLL-free environment for testing to prevent these oops situations?

In the NDepend Project Properties panel, you can define what are application assemblies to analyze (in green) and NDepend will infer Third-Party assemblies used by application ones (in blue). A list of directories where to search application and third-party assemblies is provided.

NDepend 프로젝트 속성 응용 프로그램 및 타사 어셈블리

If a third-party assembly is not found in these directories, it will be in error mode. For example if I remove the .NET Fx directory C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 I can see that .NET Fx third-party assemblies are not resolved:

NDepend Project Properties Application and Third-Party assemblies not resolved

Disclaimer: I work for NDepend


Please refer SysInternal toolkit from Microsoft from below link, https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer

다운로드 폴더로 이동하여 "Procexp64.exe"를 관리자 권한으로 엽니 다. 찾기 메뉴-> "손잡이 또는 DLL 찾기"옵션 또는 Ctrl + F 단축키를여십시오.

enter image description here


JetBrains dotPeek을 사용해보십시오 . 무료입니다.


pedeps 프로젝트 ( https://github.com/brechtsanders/pedeps )에는 .exe (또는 .dll) 파일과 해당 파일에 의존하는 모든 파일을 복사하기위한 명령 줄 도구 (copypedeps)가 있습니다. 응용 프로그램이 작동하는 시스템에서이 작업을 수행하는 경우 모든 의존성 DLL과 함께 제공 할 수 있어야합니다.

참고 URL : https://stackoverflow.com/questions/7378959/how-to-check-for-dll-dependency

반응형