Зависимый dll файл не найден

Обновлено: 01.07.2024

Аннотация

Regsvr32 — это служебная программа командной строки для регистрации и отмены регистрации элементов управления OLE, например ActiveX и библиотеки DLL в реестре Windows. Средство Regsvr32.exe установлено в папке %systemroot%\System32 в ОС Windows XP и более поздних версиях Windows.

Примечание. В 64-разрядных версиях Windows есть две версии файла Regsv32.exe:

64-разрядная версия — %systemroot%\System32\regsvr32.exe;

32-разрядная версия — %systemroot%\SysWoW64\regsvr32.exe.

Синтаксис команды Regsvr32

Программа RegSvr32.exe имеет следующие параметры командной строки.

Regsvr32 [/u] [/n] [/i[:строка_команд]] DLL-файл

/u — отменяет регистрацию сервера

/i — вызывает DllInstall, передавая ей в параметре необязательную строку_команд; при использовании с ключом /u вызывает DllUnInstall.
/n — не вызывает DllRegisterServer; это может использоваться с ключом /i

Типичные решения ошибок Regsvr32

При появлении ошибки Regsvr32 попробуйте устранить ее одним из следующих способов.

Способ 1. Повторный запуск команды Regsvr32 в командной строке с повышенными привилегиямиЧтобы открыть командную строку с повышенными привилегиями, выполните указанные ниже действия.

Windows 8.1 и Windows 8Проведите пальцем от правого края экрана к центру и коснитесь кнопки Поиск. Либо, если вы используете мышь, переместите указатель в правый нижний угол экрана и щелкните кнопку Поиск. Введите запрос Командная строка в поле Поиск, щелкните правой кнопкой мыши элемент Командная строка, затем выберите команду Запуск от имени администратора. Если система запросит пароль администратора или подтверждение, введите пароль или нажмите кнопку Разрешить.

Windows XPВойдите в систему в качестве администратора или с другой учетной записью с правами администратора и откройте окно "Командная строка".

Способ 2. Использование 32-разрядной версии Regsvr32 для регистрации 32-разрядной библиотеки DLL в 64-разрядной версии ОС WindowsЕсли при регистрации 32-разрядной библиотеки DLL в 64-разрядной версии ОС Windows появляется ошибка, выполните следующие действия.

Откройте командную строку с повышенными привилегиями.

Если 32-разрядная библиотека DLL находится в папке %systemroot%\System32, переместите ее в папку %systemroot%\SysWoW64.

иногда, когда я делаю небольшой проект, я недостаточно осторожен и случайно добавляю зависимость для 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.

  1. есть программа под названием "зависимость"
  2. Если у вас установлен cygwin, ничего проще, чем файл ldd.exe

самое безопасное-иметь чистую виртуальную машину, на которой вы можете проверить свою программу. В каждой версии, которую вы хотите протестировать, восстановите виртуальную машину до ее начального чистого значения. Затем установите программу с помощью ее установки и посмотрите, работает ли она.

проблемы Dll имеют разные лица. Если вы используете Visual Studio и динамически подключаетесь к CRT, вам нужно распространять библиотеки DLL CRT. Обновите свой VS, и вам придется распространять другую версию CRT. Просто проверка зависимостей не достаточно, так как вы можете пропустить их. Выполнение полной установки на чистую машину является единственным безопасным решением, IMO.

Если вы не хотите устанавливать полномасштабную тестовую среду и иметь Windows 7, Вы можете использовать XP-Mode в качестве начальной чистой машины и XP-более для дублирования виртуальной машины.

enter image description here

в прошлом (т. е. дни 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)

Я использую сторонний API, который определен в 2 DLL. Я включил эти библиотеки DLL в свой проект и установил ссылки на них. Пока все хорошо.

однако эти библиотеки DLL имеют по крайней мере одну зависимую DLL, которая не может быть найдена во время выполнения. Я скопировал отсутствующую DLL в проект и установил флаг "копировать для вывода", но безуспешно.

Что я должен делать здесь, чтобы сообщить проекту, где он должен найти зависимый Dll файлы?

наконец, я установил API на ПК, и все это сработало. Установка устанавливает переменную PATH и DLL находится в папке установки. но как сказать проекту заглянуть в одну из его внутренних папок?

похоже, вам нужно лучше понять стороннюю библиотеку и как она использует свои собственные зависимости. Если установка API решает проблему, но копирование файлов вручную не делает, то вы что-то упускаете. Существует либо отсутствующий файл, либо какая-то переменная среды или запись реестра, которая требуется. Две вещи, которые действительно помогут вам в этом, - это инструмент depends (который является частью установки C++) и procmon, который расскажет вам все ключи реестра и файлы, которые используются во время выполнения.

Если Вам повезет, это просто файл, который вы упускаете. Если это все, вы можете использовать раздел "События сборки" проекта, чтобы скопировать необходимые файлы в нужное место при успешной сборке. Если нет, вам придется решить это каким - то другим способом-либо путем установки API, либо путем развертывания собственного проекта установки.

Как вы развертываете? Только плоские файлы? Если это так, он должен работать до тех пор, пока файл попадает в выходной каталог проекта. Не так ли?

Если вы используете другое развертывание, вам нужно будет сообщить этому движку, чтобы включить его. Это отличается для каждого из msi / ClickOnce / etc.

вы можете либо медленно добавлять нижестоящие зависимости в качестве ссылок на ваш проект. Это громоздко и несколько хрупко

или вы можете использовать такой инструмент, как " зависит.exe " от microsoft, чтобы проверить сборки верхнего уровня и получить список ссылок на зависимости.

Как зарегистрировать DLL в Windows 10 и Windows 11

Среди частых вопросов пользователей, особенно после того, как они сталкиваются с тем, что какая-то из библиотек DLL отсутствует в Windows 10, Windows 11 или других версиях системы — как зарегистрировать DLL в соответствующей версии ОС.

В этой инструкции подробно о способах регистрации библиотек DLL в Windows x64 и x86 (32-бит) с помощью regsvr32.exe (и кратко о regasm.exe), о возможных нюансах и проблемах, которые могут возникнуть в процессе.

Дальнейшие шаги описаны в предположении, что DLL, которую нужно зарегистрировать, уже находится в нужном расположении: папке C:\Windows\System32, C:\Windows\SysWOW64 или, в некоторых случаях — отдельных папках программ, к которой относится соответствующая библиотека, например, для 1С — C:\Program Files\1cv8\номер_версии\bin (или Program Files x86 в случае 32-битной версии).

Прежде чем приступить к регистрации библиотеки, учитывайте следующие моменты:

  • В x64 версиях Windows 64-битные DLL хранятся в System32, а 32-битные — в SysWOW64 (у некоторых начинающих пользователей бывает обратное предположение исходя из имён папок).
  • Файлы DLL x64 и x86 (32-бит) — это разные файлы. И если прямого указания на разрядность в месте загрузки файла нет, то чаще это 32-битный файл (что не мешает ему работать в x64 системе), но это не всегда так.
  • Для регистрации библиотеки DLL используется системный инструмент regsvr32.exe, который также доступен в двух версиях, которые лежат в папках System32 и SysWOW64 (в случае 64-битных систем). По умолчанию при описываемых далее действиях запускается x64 версия.
  • 32-битным программам и играм (по умолчанию устанавливаются в Program Files x86 в 32-битных системах) для работы нужны 32-битные DLL, не зависимо от разрядности Windows.

Сам процесс регистрации в общем случае состоит из следующих шагов:

Ошибка регистрации regsvr32 точка входа DllRegisterServer не найдена

Почему не удается зарегистрировать DLL

Ошибка при регистрации с помощью regsvr32 вида «Точка входа DllRegisterServer не найдена» говорит о том, что эта библиотека DLL не поддерживает регистрацию описанным методом. Можно попробовать использовать вариант команды:

но с большой вероятностью и это не поможет.

У большинства домашних пользователей такая проблема возникает при регистрации файлов DLL для игр и программ, часто не вполне лицензионных, которые сообщили, что нужный файл DLL не обнаружен или отсутствует. Причем сами библиотеки DLL обычно скачаны со сторонних сайтов (и чаще всего имеют имена начинающиеся с «vc», «msvc» или «d3d»). А решение, как правило, простое — выяснить, частью какого набора компонентов является эта DLL и установить эти компоненты с помощью их собственного установщика. Более подробно проблема и подходы к решению описаны в инструкции Точка входа DllRegisterServer не найдена — причины и возможные решения.

Видео

Надеюсь, цель достигнута, а количество вопросов, связанных с регистрацией DLL в Windows, уменьшилось.

Читайте также: