Как посмотреть зависимости dll
Иногда, когда я делаю небольшой проект, я не достаточно осторожен и случайно добавляю зависимость для DLL, о которой я не знаю. Когда я отправляю эту программу другу или другим людям, "она не работает", потому что отсутствует "какая-то DLL". Это, конечно, потому что программа может найти DLL в моей системе, но не в их.
Есть ли способ проверить исполняемый файл на наличие DLL зависимостей или выполнить программу в "чистой" среде без DLL для тестирования, чтобы предотвратить такие ситуации упс?
dumpbin из инструментов Visual Studio (папка VC\bin) может помочь здесь:
Я могу порекомендовать интересное решение для поклонников Linux. После изучения этого решения я переключился с DependencyWalker на этот.
Вы можете использовать свой любимый ldd поверх связанных с Windows exe , dll .
Для этого вам необходимо установить Cygwin (базовая установка, без дополнительных пакетов) в Windows, а затем просто запустить Cygwin Terminal . Теперь вы можете запускать ваши любимые команды Linux, в том числе:
UPD: Вы можете использовать ldd также через терминал git bash в Windows . Нет необходимости устанавливать cygwin в случае, если у вас уже установлен git.
Определите полный путь к файлу сборки, с которой вы пытаетесь работать
В открывшемся окне введите dumpbin /dependents [path] , где [path] - это путь, который вы выяснили на шаге 2
нажмите клавишу ввода
Бэм, у тебя есть информация о зависимости. Окно должно выглядеть так:
- Есть программа под названием "Зависит"
- Если у вас установлен Cygwin, ничего проще, чем ldd file.exe
Самое безопасное - иметь чистую виртуальную машину, на которой вы можете протестировать свою программу. На каждой версии, которую вы хотите протестировать, восстановите VM к его первоначальному чистому значению. Затем установите вашу программу, используя ее настройки, и посмотрите, работает ли она.
У Dll проблем разные лица. Если вы используете Visual Studio и динамически связываетесь с CRT, вы должны распространять библиотеки DLL CRT. Обновите ваш VS, и вам придется распространять другую версию CRT. Недостаточно просто проверить зависимости, так как вы можете их пропустить. Выполнение полной установки на чистой машине - единственное безопасное решение, IMO.
Если вы не хотите настраивать полнофункциональную среду тестирования и использовать Windows 7, вы можете использовать XP-Mode в качестве начальной чистой машины и XP-More для дублирования виртуальной машины.
На компьютере разработчика вы можете запустить программу и запустить Sysinternals Process Explorer . В нижней панели он покажет вам загруженные библиотеки DLL и текущие пути к ним, что удобно по ряду причин. Если вы выполняете пакет развертывания, он покажет, какие библиотеки DLL указаны по неправильному пути (т.е. не были упакованы правильно).
ВНИМАНИЕ: Я в прошлом испортил свои Windows, дурачась с gflag, заставляя его ползти на колени, вы были предупреждены.
Примечание. "Привязка к загрузчику" относится к каждому процессу, поэтому включение пользовательского интерфейса не будет проверяться (используйте cdb или glfags -i).
Пожалуйста, поищите в файле google.exe, это небольшая утилита для этого.
Существует ли программа/сценарий, который может проверять исполняемый файл на наличие DLL зависимостей или выполнять программу в "чистой" среде, свободной от DLL, для тестирования, чтобы предотвратить возникновение таких проблем?
На панели "Свойства проекта NDepend" вы можете определить, какие сборки приложения нужно анализировать (выделено зеленым цветом) и . NDepend будет выводить сборки сторонних производителей, используемые приложениями (в синем). Предоставляется список каталогов, в которых можно искать приложения и сторонние сборки.
иногда, когда я делаю небольшой проект, я недостаточно осторожен и случайно добавляю зависимость для DLL, о которой я не знаю. Когда я отправляю эту программу другу или другим людям, "это не работает", потому что "некоторые DLL" отсутствуют. Это, конечно, потому что программа может найти DLL на моей системе, но не на их.
есть ли программа / скрипт, который может сканировать исполняемый файл для зависимостей DLL или выполнять программу в "чистой" среде без DLL для тестирования предотвратите эти упс ситуациях?
dumpbin из Visual Studio tools (VC\bin папка) может помочь здесь:
Я могу порекомендовать интересное решение для поклонников Linux. После того, как я изучил это решение, я переключился с DependencyWalker на это.
вы можете использовать ваш любимый ldd по сравнению с Windows, связанные с exe , dll .
для этого Вам необходимо установить программа (базовая установка, без каких-либо дополнительных пакетов не требуется) на вашем Windows, а затем просто запустите Cygwin Terminal . Теперь вы можете запускать свои любимые команды Linux, в том числе:
UPD: можно использовать ldd и через Git Bash terminal на Windows. Нет необходимости устанавливать cygwin в случае, если у вас уже установлен git.
- есть программа под названием "зависимость"
- Если у вас установлен cygwin, ничего проще, чем файл ldd.exe
самое безопасное-иметь чистую виртуальную машину, на которой вы можете проверить свою программу. В каждой версии, которую вы хотите протестировать, восстановите виртуальную машину до ее начального чистого значения. Затем установите программу с помощью ее установки и посмотрите, работает ли она.
проблемы Dll имеют разные лица. Если вы используете Visual Studio и динамически подключаетесь к CRT, вам нужно распространять библиотеки DLL CRT. Обновите свой VS, и вам придется распространять другую версию CRT. Просто проверка зависимостей не достаточно, так как вы можете пропустить их. Выполнение полной установки на чистую машину является единственным безопасным решением, IMO.
Если вы не хотите устанавливать полномасштабную тестовую среду и иметь Windows 7, Вы можете использовать XP-Mode в качестве начальной чистой машины и XP-более для дублирования виртуальной машины.
в прошлом (т. е. дни WinXP), я использовал, чтобы зависеть/полагаться на DLL Dependency Walker (зависит.exe) но бывают случаи, когда я все еще не могу определить проблему(ы) DLL. В идеале, мы хотели бы узнать перед выполнением проверок, но если это не решит его (или займет слишком много времени), вы можете попробовать включить "привязку загрузчика" , как описано далее http://blogs.msdn.com/b/junfeng/archive/2006/11/20/debugging-loadlibrary-failures.aspx и https://msdn.microsoft.com/en-us/library/windows/hardware/ff556886 (v=vs.85). aspx и кратко упоминается LoadLibrary терпит неудачу; GetLastError не помогает
предупреждение: Я испортил свои окна в прошлом дурачась с gflag заставляя его ползти на колени, вы были предупреждены.
Примечание: "Loader snap" для каждого процесса, поэтому UI enable не будет оставаться проверенным (используйте cdb или glfags-i)
Иногда, когда я делаю небольшой проект, я не достаточно осторожен и случайно добавляю зависимость для DLL, о которой я не знаю. Когда я отправляю эту программу другу или другим людям, «она не работает», потому что отсутствует «какая-то DLL». Это, конечно, потому что программа может найти DLL в моей системе, но не в их.
Есть ли способ проверить исполняемый файл на наличие зависимостей DLL или выполнить программу в «чистой» среде, свободной от DLL, для тестирования, чтобы предотвратить возникновение таких проблем ?
Отладчик показывает каждую DLL, которая загружается в окне вывода. Модули Debug + Windows + показывают их список. Будьте уверены, что вы можете объяснить все из них. И тестируйте ваш установщик так же, как вы тестируете свой код, используйте виртуальную машину. @Hans Passant: Могу ли я где-нибудь найти полный список стандартных библиотек Windows? Да, в c: \ windows \ system32 с авторским правом Microsoft. @orlp - Вы также можете попробовать dumpbin /dependents <program> . Я предполагаю, что список будет более релевантным, чем перечисление всех DLL в %SYSTEM% или %SYSTEM32% . Также см. Параметры DUMPBIN на MSDN.Попробуйте Dependency Walker (последнее обновление в 2006 году) или современный переписать его под названием Dependencies .
Я читал, что это сейчас датировано, есть что-нибудь более актуальное? Если возможно, я буду доверять только исходному поставщику ОС, поскольку ddl-зависимость должна быть задачей ОС. Может ли какая-либо служебная программа Microsoft сделать это? Командная строка подходит для меня. @RobinHsu: DependencyWalker раньше поставлялся с Visual Studio до Visual Studio 2005. Самая последняя сборка включена в комплект для разработки драйверов Windows (и не доступна на официальном веб-сайте). До сих пор официально не является инструментом Microsoft, но санкционирован, продвигается и рекламируется Microsoft.dumpbin Инструменты Visual Studio (папка VC \ bin) могут помочь здесь:
Удобный маленький инструмент, и избавляет от необходимости устанавливать что-то новое, когда у вас уже установлена VS. Да, dumpbin.exe очень полезно разобраться /dependents и /imports . Вы также можете использовать его на других компьютерах, если копируете link.exe вместе с ним и убедитесь, что на целевом компьютере доступен соответствующий распространяемый пакет времени выполнения Visual C ++ x86 ( msvcr120.dll для Visual Studio 2013) . Некоторые параметры имеют дополнительные зависимости. - Между прочим, они облажались с опцией названия, она должна была быть, /PREREQUISITES а не /DEPENDENTS должна была изучать латынь. Это замечательно, мы добавили это в нашу систему сборки в качестве шага проверки, когда генерируется окончательный исполняемый файл, поэтому мы не зависим от того, что не включено в поставку. Единственный недостаток - этот удобный инструмент очень скрыт: c: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.14.26428 \ bin \ Hostx64 \ x64> dumpbin @rkachach Если вы откроете командную строку Visual Studio (Инструменты -> Командная строка Visual Studio), она будет распознана как внешняя команда, и вам нужно всего лишь набрать «dumpbin».Я могу порекомендовать интересное решение для поклонников Linux. После изучения этого решения я переключился с DependencyWalker на этот.
Вы можете использовать свой любимый по ldd сравнению с Windows exe , dll .
Для этого вам нужно установить Cygwin (базовая установка, без дополнительных пакетов) в Windows, а затем просто запустить Cygwin Terminal . Теперь вы можете запускать ваши любимые команды Linux, в том числе:
UPD: Вы можете использовать ldd также через терминал git bash в Windows . Нет необходимости устанавливать cygwin в случае, если у вас уже установлен git.
Я только что установил cygwin и был рад найти команды обратно linux, но я не смог выйти из корня Cygwin для доступа к другим файлам на моем локальном диске (C :). Это нормально? К сожалению, есть некоторая зависимость, которые не найден следующим образом: $ ldd ./Debug/helloworld.exe . => . (0x77d60000) . Утилита dumpbin показывает все зависимости правильно. Я использую ldd через терминал GIT BASH на Windows и работает нормально. Так что если у вас есть git, это будет легко, нет необходимости устанавливать Cygwin. Пример: borkox @ bobipc MINGW64$ ldd /c/Users/borkox/.javacpp/cache/openblas-0.3.0-1.4.2-windows-x86_64.jar/org/bytedeco/javacpp/windows-x86_64/jniopenblas_nolapack.dll ntdll.dll => /c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffe46910000) KERNEL32.DLL => /c/WINDOWS/System32/KERNEL32.DLL (0x7ffe46610000) KERNELBASE.dll => / c / WINDOWS / System32 / KERNEL. dll (0x7ffe42d40000) msvcrt.dll => /c/WINDOWS/System32/msvcrt.dll (0x7ffe44120000)
Как тот, у кого уже был установлен git bash, это было предпочтительным решением. Спасибо!Определите полный путь к файлу сборки, с которой вы пытаетесь работать
В открывшемся окне введите dumpbin /dependents [path] , где [path] это путь , который вы выяснили в шаге 1
нажмите клавишу ввода
Бэм, у тебя есть информация о зависимости. Окно должно выглядеть так:
Обновление для VS 2019: вам нужен этот пакет в вашей установке VS:
- Есть программа под названием «Зависит»
- Если у вас установлен cygwin, ничего проще, чем ldd file.exe
Самое безопасное - иметь чистую виртуальную машину, на которой вы можете протестировать свою программу. На каждой версии, которую вы хотите протестировать, восстановите ВМ к ее первоначальному чистому значению. Затем установите вашу программу, используя ее настройки, и посмотрите, работает ли она.
У длл проблем есть разные лица. Если вы используете Visual Studio и динамически связываетесь с CRT, вы должны распространять библиотеки DLL CRT. Обновите ваш VS, и вам придется распространять другую версию CRT. Недостаточно просто проверить зависимости, так как вы можете их пропустить. Выполнение полной установки на чистой машине - единственное безопасное решение, IMO.
Если вы не хотите настраивать полнофункциональную тестовую среду и использовать Windows 7, вы можете использовать XP-Mode в качестве начальной чистой машины и XP-More для дублирования виртуальной машины.
На компьютере разработчика вы можете запустить программу и запустить Sysinternals Process Explorer . В нижней панели он покажет вам загруженные библиотеки DLL и текущие пути к ним, что удобно по ряду причин. Если вы выполняете пакет развертывания, он показывает, какие библиотеки DLL указаны по неправильному пути (т. Е. Неправильно упакованы).
ВНИМАНИЕ: Я в прошлом испортил свои Windows, дурачась с gflag, заставляя его ползти на колени, вы были предупреждены.
Примечание. «Привязка к загрузчику» относится к каждому процессу, поэтому включение пользовательского интерфейса не будет проверяться (используйте cdb или glfags -i).
Существует ли программа / сценарий, который может сканировать исполняемый файл на наличие зависимостей DLL или выполнить программу в «чистой» среде, свободной от DLL, для тестирования, чтобы предотвратить возникновение таких проблем?
На панели «Свойства проекта NDepend» вы можете определить, какие сборки приложения будут анализироваться (зеленым цветом), а NDepend выведет сборки сторонних производителей, используемые приложениями (синим цветом). Предоставляется список каталогов, в которых можно искать приложения и сторонние сборки.
иногда, когда я делаю небольшой проект, я недостаточно осторожен и случайно добавляю зависимость для DLL, о которой я не знаю. Когда я отправляю эту программу другу или другим людям, "это не работает", потому что "некоторая DLL" отсутствует. Это, конечно, потому, что программа может найти DLL в моей системе, но не в их.
есть ли программа / скрипт, который может сканировать исполняемый файл для зависимостей DLL или выполнять программу в "чистой" среде без DLL для тестирования предотвратить эти упс ситуациях?
dumpbin из Visual Studio tools (папка VC\bin) может помочь здесь:
Я могу порекомендовать интересное решение для поклонников Linux. После того, как я изучил это решение, я переключился с DependencyWalker на это.
вы можете использовать ваш любимый ldd через связанные с Windows exe , dll .
для этого Вам необходимо установить Cygwin (базовая установка, без дополнительных пакетов не требуется) на вашем Windows, а затем просто запустите Cygwin Terminal . Теперь вы можете запускать свои любимые команды Linux, в том числе:
UPD: можно использовать ldd и через Git Bash терминал на Windows. Нет необходимости устанавливать cygwin в случае, если у вас уже установлен git.
- существует программа под названием "зависит"
- Если у вас установлен cygwin, ничего проще, чем файл ldd.exe
безопаснее всего иметь чистую виртуальную машину, на которой вы можете протестировать свою программу. В каждой версии, которую вы хотите протестировать, восстановите VM до его начального чистого значения. Затем установите программу с помощью ее установки и посмотрите, работает ли она.
Dll проблемы имеют разные лица. Если вы используете Visual Studio и динамически подключаетесь к CRT, вы должны распространять библиотеки CRT. Обновите VS, и вы должны распространить другую версию CRT. Просто проверка зависимостей не достаточно, так как вы можете пропустить их. Выполнение полной установки на чистой машине является единственным безопасным решением, IMO.
Если вы не хотите устанавливать полномасштабную тестовую среду и иметь Windows 7, Вы можете использовать XP-Mode в качестве начальной чистой машины и XP-более дублировать ВМ.
на вашей машине разработки вы можете выполнить программу и запустить Sysinternals Process Explorer. В нижней панели он покажет вам загруженные библиотеки DLL и текущие пути к ним, что удобно по ряду причин. Если вы выполняете свой пакет развертывания, он покажет, на какие DLL ссылаются в неправильном пути (т. е. не были упакованы правильно).
предупреждение: Я испортил свои окна в прошлом, дурачась с gflag, заставляя его ползать на колени, вы были предупреждены.
Примечание: "Loader snap" для каждого процесса, поэтому UI enable не будет оставаться проверенным (используйте cdb или glfags-i)
пожалуйста, поиск "зависит.exe " в google это крошечная утилита для обработки этого.
Если у вас есть исходный код, вы можете использовать ndepend.
Это дорого и делает намного больше, чем анализ зависимостей, поэтому это может быть излишним для того, что вы ищете.
есть ли программа/скрипт, который может сканировать исполняемый файл для DLL зависимости или выполнение программы в "чистой" среде без DLL для тестирования, чтобы предотвратить эти ситуации oops?
на панели свойств проекта NDepend можно определить, какие сборки приложений следует анализировать (зеленым цветом) и NDepend сделает вывод Сборки сторонних производителей, используемые приложениями (в синем). Список каталогов, в которых выполняется поиск приложений и сторонних сборок.
Читайте также: