Иногда, когда я делаю небольшой проект, я не достаточно осторожен и случайно добавляю зависимость для DLL, о которой я не знаю. Когда я отправляю эту программу другу или другим людям, «она не работает», потому что отсутствует «какая-то DLL». Это, конечно, потому что программа может найти DLL в моей системе, но не в их.
Есть ли способ проверить исполняемый файл на наличие зависимостей DLL или выполнить программу в «чистой» среде, свободной от DLL, для тестирования, чтобы предотвратить возникновение таких проблем ?
windows
dll
dependencies
orlp
источник
источник
dumpbin /dependents <program>
. Я предполагаю, что список будет более релевантным, чем перечисление всех DLL в%SYSTEM%
или%SYSTEM32%
. Также см. Параметры DUMPBIN на MSDN.Ответы:
Попробуйте
Dependency Walker
(последнее обновление в 2006 году) или современный переписать его под названиемDependencies
.источник
dumpbin
по ходу зависимости. msdn.microsoft.com/en-us/library/756as972.aspx | stackoverflow.com/a/28304716/3543437dumpbin
Инструменты Visual Studio (папка VC \ bin) могут помочь здесь:источник
dumpbin.exe
очень полезно разобраться/dependents
и/imports
. Вы также можете использовать его на других компьютерах, если копируетеlink.exe
вместе с ним и убедитесь, что на целевом компьютере доступен соответствующий распространяемый пакет времени выполнения Visual C ++ x86 (msvcr120.dll
для Visual Studio 2013) . Некоторые параметры имеют дополнительные зависимости. - Между прочим, они облажались с опцией названия, она должна была быть,/PREREQUISITES
а не/DEPENDENTS
должна была изучать латынь.Я могу порекомендовать интересное решение для поклонников Linux. После изучения этого решения я переключился с DependencyWalker на этот.
Вы можете использовать свой любимый по
ldd
сравнению с Windowsexe
,dll
.Для этого вам нужно установить Cygwin (базовая установка, без дополнительных пакетов) в Windows, а затем просто запустить
Cygwin Terminal
. Теперь вы можете запускать ваши любимые команды Linux, в том числе:UPD: Вы можете использовать
ldd
также через терминал git bash в Windows . Нет необходимости устанавливать cygwin в случае, если у вас уже установлен git.источник
$ ldd ./Debug/helloworld.exe ??? => ??? (0x77d60000)
. Утилита dumpbin показывает все зависимости правильно.Определите полный путь к файлу сборки, с которой вы пытаетесь работать
Нажмите кнопку запуска, введите «dev». Запустите программу под названием «Командная строка разработчика для VS 2017»
В открывшемся окне введите
dumpbin /dependents [path]
, где[path]
это путь , который вы выяснили в шаге 1нажмите клавишу ввода
Бэм, у тебя есть информация о зависимости. Окно должно выглядеть так:
Обновление для VS 2019: вам нужен этот пакет в вашей установке VS:
источник
источник
depends
не поддерживает наборы API, поэтому он бесполезен для Win7 +.Самое безопасное - иметь чистую виртуальную машину, на которой вы можете протестировать свою программу. На каждой версии, которую вы хотите протестировать, восстановите ВМ к ее первоначальному чистому значению. Затем установите вашу программу, используя ее настройки, и посмотрите, работает ли она.
У длл проблем есть разные лица. Если вы используете Visual Studio и динамически связываетесь с CRT, вы должны распространять библиотеки DLL CRT. Обновите ваш VS, и вам придется распространять другую версию CRT. Недостаточно просто проверить зависимости, так как вы можете их пропустить. Выполнение полной установки на чистой машине - единственное безопасное решение, IMO.
Если вы не хотите настраивать полнофункциональную тестовую среду и использовать Windows 7, вы можете использовать XP-Mode в качестве начальной чистой машины и XP-More для дублирования виртуальной машины.
источник
На компьютере разработчика вы можете запустить программу и запустить Sysinternals Process Explorer . В нижней панели он покажет вам загруженные библиотеки DLL и текущие пути к ним, что удобно по ряду причин. Если вы выполняете пакет развертывания, он показывает, какие библиотеки DLL указаны по неправильному пути (т. Е. Неправильно упакованы).
В настоящее время наша компания использует проекты установщика Visual Studio для обхода дерева зависимостей и вывода в виде свободных файлов программы. В VS2013 теперь это расширение: https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d . Затем мы упаковываем эти свободные файлы в более полный установщик, но, по крайней мере, эта программа установки проецирует все зависимости точка-сеть и помещает их в одну точку и предупреждает вас, когда чего-то не хватает.
источник
В прошлом (например, дни 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 не помогает
ВНИМАНИЕ: Я в прошлом испортил свои Windows, дурачась с gflag, заставляя его ползти на колени, вы были предупреждены.
Примечание. «Привязка к загрузчику» относится к каждому процессу, поэтому включение пользовательского интерфейса не будет проверяться (используйте cdb или glfags -i).
источник
NDepend уже упоминался Джесси (если вы анализируете код .NET), но давайте объясним, как именно он может помочь.
На панели «Свойства проекта NDepend» вы можете определить, какие сборки приложения будут анализироваться (зеленым цветом), а NDepend выведет сборки сторонних производителей, используемые приложениями (синим цветом). Предоставляется список каталогов, в которых можно искать приложения и сторонние сборки.
Если сторонняя сборка не найдена в этих каталогах, она будет в режиме ошибки. Например, если я удаляю каталог .NET Fx,
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
я вижу, что сторонние сборки .NET Fx не разрешаются:Отказ от ответственности: я работаю на NDepend
источник
Пожалуйста, поищите в файле google.exe, это небольшая утилита, чтобы справиться с этим.
источник
Если у вас есть исходный код, вы можете использовать ndepend.
http://www.ndepend.com/
Это дорого и делает гораздо больше, чем анализ зависимостей, так что это может быть излишним для того, что вы ищете.
источник
LoadLibraryEx
...LoadLibraryEx
не помогает тамПроект pedeps ( https://github.com/brechtsanders/pedeps ) имеет инструмент командной строки (copypedeps) для копирования ваших файлов .exe (или .dll) вместе со всеми файлами, от которых он зависит. Если вы сделаете это в системе, в которой работает приложение, вы сможете отправить его со всеми библиотеками зависимостей.
источник
Пожалуйста, обратитесь к инструментарию SysInternal от Microsoft по ссылке ниже, https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
Перейдите в папку загрузки, откройте «Procexp64.exe» с правами администратора. Откройте меню «Найти» -> «Найти дескриптор или DLL» или комбинацию клавиш Ctrl + F.
источник
Попробуйте JetBrains dotPeek . Это бесплатно.
источник