Не удается загрузить dll nvml не найден указанный модуль исключение из hresult 0x8007007e
I downloaded zlib and compiled the library as both Windows 32-bit and Windows 64-bit dll. I now have zlibwapi.dll and zlibwapi64.dll .
The dlls are copied into my application folder and are referenced as follows:
At runtime I check whether I'm 32-bit or 64-bit, and call appropriate version.
This works fine if I'm 32-bit, but the 64-bit version gives
Cannot load DLL "zlibwapi64.dll": Module not found. (HRESULT exception: 0x8007007E)
I've found many similar questions on the Internet, and the suggested reason was that the library depends on some other libraries, and it is those libraries that may not be found.
This does not seem to the case:
I have tried setting absolute path to the 64-bit dll, it does not help.
How do I make it work?
Are you using both in the same application? Keep in mind 32 bit application can only use 32 bit dlls and 64 bit application can only use 64 bit dlls.
@Dani I'm using either, depending on a runtime check. The framework does not attempt to load a dll until it is referenced. When I set the project to x86, it runs ok and calls uncompress32 without an attempt to call uncompress64 . When I set the project to x64, it does not attempt to call uncompress32 and fails to call uncompress64
2 Answers 2
It is a fairly basic "file not found" kind of error, unfortunately it doesn't tell you explicitly what DLL it couldn't find. You already know about the issue with dependent DLLs. Note that you can avoid the irksome dependency on msvcr90.dll by compiling the code with /MT
You'll need to debug the problem and that requires getting insight in where it is looking for DLLs. One good tool is SysInternals' ProcMon utility, it shows you exactly where your program is looking for files. You should see it probing for the DLL, searching through the directories of the PATH and failing to find the file.
Unfortunately ProcMon is a bit chatty and has a habit of drowning you in the data. A more dedicated tool is GFlags.exe, a tool available from the Debugging Tools for Windows package. These days included with the Windows SDK. Stored in c:\program files (x86)\debugging tools for windows\gflags.exe after you installed it. You can turn on the "Show loader snaps" option. On later Windows versions, that tells the Windows loader to generate debugging messages when it is searching for DLLs. They'll appear in the Output window when you enable unmanaged debugging.
Try ProcMon first, much easier to get going.
And of course consider pure managed solutions so you are not fighting these kind of install problems. Good ones are DotNetZip and SharpZipLib, take their first google hit.
Если вы получили код ошибки 0x8007007E на компьютере Windows 10/8/7, то вы ищете решение, и вы попали в нужное место. Код ошибки 0x8007007E может появиться в следующих трех сценариях, и в этом посте предлагаются некоторые рекомендации, которые могут помочь вам решить вашу проблему:
Вам также может понравиться
Как работает графика в операционных системах семейства Linux
Соло-майнинг криптовалюты Wownero (WOW) после форка в июле 2021 года
Код ошибки 0x8007007E
Давайте посмотрим на возможные исправления для трех разных сценариев.
Ошибка Центра обновления Windows 0x8007007E
Windows 10 Update Error Code 0x8007007E возникает, когда обновления не синхронизированы. Это происходит как для автономных компьютеров с Windows 10, так и при подключении к Enterprise. Windows Server управляет обновлениями на всех компьютерах в сети предприятия.
Microsoft указывает, что, когда исправление не установлено перед синхронизацией, это происходит.
Происходит при сбое синхронизации обновления, поскольку у вас не установлено исправление до включения синхронизации обновления. В частности, операция CopyToCache не выполняется на клиентах, которые уже загрузили обновление. Это связано с тем, что службы обновления Windows Server содержат неверные метаданные, связанные с обновлением.
1] Удалить содержимое папки распространения программного обеспечения вручную
Windows загрузит все файлы обновлений в эту папку. Он действует как буфер перед установкой на компьютер с Windows 10. Обязательно удалите содержимое папки распространения программного обеспечения (C: \ Windows \ SoftwareDistribution \ DataStore) вручную. Вам придется остановить службы Центра обновления Windows, прежде чем удалять эти файлы. После этого перезапустите службу Windows Update.
Это относится как к автономным компьютерам, так и к корпоративным компьютерам.
2] Запустите средство устранения неполадок Центра обновления Windows .
Если у вас есть автономный компьютер, вы можете запустить средство устранения неполадок. Windows поставляется со встроенным средством устранения неполадок Центра обновления Windows. Вы можете запустить то, что решит проблему вокруг Windows 10 Update, чтобы решить эту проблему.
Как только компьютер синхронизируется с сервером обновлений (Microsoft Update Server или Enterprise Server), все необходимые обновления будут установлены в первую очередь. Остальные обновления будут опубликованы позже.
Что такое библиотека NVML?
NVIDIA Management Library (NVML) – это программная библиотека, входящая в пакет NVIDIA, предназначенная для управления и мониторинга видеокартами Нвидиа.
Она обычно устанавливается в пакете с драйверами, поэтому простая их переустановка может решить проблему.
При использовании различных сборок «от народных умельцев» повторная установка драйверов может не решить проблемы. Повторение такой ошибки даже после переустановки драйверов свидетельствует о серьезных проблемах в операционной системе в части, касающейся управления видеокартами Nvidia, что чревато их порчей.
В то же время ошибка NVML library not found довольно легко исправляется путем копирования файла nvml.dll в директории системы, где они должны находиться.
Ошибка 0x8007007E в принтере
Когда 32-разрядный универсальный драйвер установлен на сервере, он создает запись в реестре. Этот ключ сообщает клиентскому компьютеру, что ему нужна копия файла DLL, чтобы принтер работал на клиентском компьютере.
Однако, если это 64-битный клиент, ему потребуется 64-битная версия драйвера. Но так как сервер предлагает 32-разрядную версию драйвера (из-за записи в реестре), это приводит к этой ошибке. Запись реестра на сервере находится по адресу:
HKLM \ SYSTEM \ CurrentControlSet \ Control \ Print \ Printers \\ CopyFiles \ биди.
Чтобы решить эту проблему, просто удалите этот ключ. Отправьте это, когда запрос сделан 64-битным клиентом, больше не будет сказано, что ему нужно скопировать неправильный файл.
Невозможно загрузить DLL ‘MyOwn.dll’: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)
Я прочитал и попробовал решения severa, которые я нашел в Интернете. Ничего не работает.
Я попытался использовать следующие методы:
Когда я попытался выполнить эту статью, и когда я запускаю этот пример (из загруженного кода), он запускается без проблем (используемая dll находится в bin/debug папка)
Я скопировал свою dll (вместе со всеми файлами в зависимости от моей папки bin).
Я также пробовал этот подход, но получил ту же ошибку:
Из того, что я помню в Windows, порядок поиска для dll:
- Текущий каталог
- Системная папка, C:\windows\system32 or c:\windows\SysWOW64 (для 32-разрядного процесса в 64-битной ячейке).
- Чтение из переменной среды Path
Вы можете использовать инструмент dumpbin для поиска необходимых зависимостей DLL:
Это расскажет вам, какие DLL файлы должны загружать DLL. Особенно обратите внимание на MSVCR *.dll. Я видел, что ваш код ошибки возникает, когда не установлен Redistributable Visual С++.
Вы можете получить “Распространяемые пакеты Visual С++ для Visual Studio 2013” с веб-сайта Microsoft. Он устанавливает c:\windows\system32\MSVCR120.dll
В имени файла 120 = 12.0 = Visual Studio 2013.
Будьте осторожны, чтобы у вас была правильная версия Visual Studio (10.0 = VS 10, 11 = VS 2012, 12.0 = VS 2013…), правильная архитектура (x64 или x86) для вашей целевой платформы DLL, а также вам нужно будьте осторожны в сборке отладки. Отладочная сборка DLL зависит от MSVCR120d.dll, которая является отладочной версией библиотеки, которая устанавливается с помощью Visual Studio, но не с помощью распространяемого пакета.
Попробуйте ввести полный путь к dll.
Если это не сработает, попробуйте скопировать dll в папку system32.
DLL должна находиться в папке bin.
В Visual Studio я добавляю dll в свой проект (НЕ в ссылках, но “Добавить существующий файл” ). Затем установите для свойства “Копировать в выходной каталог” для dll значение “Копировать, если новое”.
Убедитесь, что все зависимости вашей собственной DLL находятся рядом с dll или в System32 .
Есть одна очень забавная вещь (и имеет техническую значимость), которая может растратить ваши часы, поэтому подумал о том, чтобы поделиться ею здесь –
Я создал проект консольного приложения ConsoleApplication1 и проект библиотеки классов ClassLibrary1 .
Весь код, который делал p/invoke, присутствовал в ClassLibrary1.dll . Поэтому перед отладкой приложения из visual studio я просто скопировал неуправляемую сборку С++ ( myUnmanagedFunctions.dll ) в каталог \bin\debug\ проекта ClassLibrary1 , чтобы он мог быть загружен в среду выполнения CLR.
Я продолжал получать
ошибка в течение нескольких часов. Позже я понял, что все неуправляемые сборки, которые необходимо загрузить, необходимо скопировать в каталог \bin\debug стартового проекта ConsoleApplication1 , который обычно представляет собой форму выигрыша, консольное или веб-приложение.
Итак, будьте осторожны, Current Directory в принятом ответе фактически означает Current Directory основного исполняемого файла, с которого начинается процесс приложения. Похоже на очевидную вещь, но иногда это может быть не так.
Извлеченный урок. Всегда размещайте неуправляемые DLL в том же каталоге, что и исполняемый файл запуска, чтобы убедиться, что он может быть найден.
Это “kludge” , но вы могли бы хотя бы использовать его для проверки на работоспособность:
Попробуйте жестко кодировать путь к DLL в вашем коде
Сказав это; в моем случае с запуском dumpbin /DEPENDENTS , как было предложено @anthony-hayward, и копирование через 32-разрядных версий DLL, перечисленных там в моем рабочем каталоге, решило эту проблему для меня.
Включите ведение журнала фьюжн, см. этот вопрос за советом о том, как это сделать. Отладка проблем с загрузкой приложений смешанного режима может быть правильной болью. Запуск слияния может быть большой помощью.
Убедитесь, что вы устанавливаете платформу Build Platform Target на x86 или x64, чтобы она была совместима с вашей DLL, которая может быть скомпилирована для 32-битной платформы.
В основном это строка DOS, и вы можете настроить ее на основе того, где строится ваша DLL.
У меня была такая же проблема, когда я развернул свое приложение для тестирования ПК. Проблема заключалась в разработке ПК с msvcp110d.dll и msvcr110d.dll , но не на тестовом ПК.
Я добавил “Слиточный модуль Visual Studio С++ 11.0 DebugCRT (x86)” в InstalledSheild, и он сработал. Надеюсь, это будет полезно для кого-то другого.
Настройка: 32-разрядная версия Windows 7
Контекст: установлен драйвер PCI-GPIB, с которым я не смог связаться из-за вышеупомянутой проблемы.
Короткий ответ: переустановите драйвер.
Длительный ответ:
Я также использовал Dependency Walker, в котором было указано несколько отсутствующих модулей зависимостей. Сразу же я подумал, что это была неудачная установка драйвера. Я не хотел проверять и восстанавливать каждый отсутствующий файл.
Тот факт, что я не смог найти деинсталлятор в разделе “Программы и функции панели управления”, является еще одним показателем плохой установки. Мне пришлось вручную удалить пару *.dll в \system32 и ключи реестра, чтобы разрешить повторную установку драйвера.
Неожиданная часть заключалась в том, что не все модули зависимостей были разрешены. Тем не менее, теперь можно указать *.dll интерес.
Невозможно загрузить DLL “PrinterSettings.dll”: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)
Я только что построил свой проект в конфигурации режима отладки, и на этот раз мой cpp dll работал нормально.
Я думаю, что ваша неуправляемая библиотека нуждается в манифесте.
Здесь, как добавить его в свой двоичный файл. и здесь.
Таким образом, в вашем окне может быть установлено несколько версий распространяемой библиотеки, но только одно из них должно удовлетворять вашему приложению, и это может быть не по умолчанию, поэтому вам нужно сообщить системе, что вам нужна ваша библиотека, поэтому манифест.
1.Проверил совместимость dll с 32-битным или 64-битным процессором.
2.Проверены правильные пути к папке DLL.bin, system32/sysWOW64 или указанному пути.
3.Проверено, отсутствуют ли файлы PDB (база данных программ). Это видео дает вам лучшее представление о файлах pdb.
При запуске 32-битного двоичного кода C/c++ в 64-битной системе это может произойти из-за несовместимости платформы. Вы можете изменить его из Build> Configuration manager.
EDIT:
Исправлено это путем замены поврежденной dll, расположенной здесь: “C:\Program Files (x86)\Common Files\microsoft shared\Visual Database Tools\dsref80.dll”
Так же, как немного хедз-ап для всех, кто приезжает сюда из Google…
Это произошло (для меня и большинство людей здесь) в результате установки VS11 Beta, а затем без установки VS11 Beta без установки VS2012. Замена DLL, упомянутых выше, и, возможно, DLL, расположенные на пути ниже, как представляется, устраняют проблемы.
Моя проблема была в основном такой же.
Ваше решение привело меня в правильном направлении. Но вместо файла dsref80.dll моей проблемой была вся папка C:\Program Files (x86)\Common Files\microsoft shared\MSDesigners8. После удаления этой папки и вставки копии с виртуальной машины (возможно, также работал бы ремонт VS), все работает снова!
Я столкнулся с этой проблемой, пытаясь использовать SQL Server 2008 R2 Business Intelligence Development Studio (BIDS), которая использует Visual Studio 2008 Shell (интегрированный режим). Каждый раз, когда я пытался создать новый проект служб Integration Services, я получал ошибку: “… указанный модуль не найден. (Исключение из HRESULT: 0x8007007E) (System.Windows.Forms)…”.
Как отмечали другие плакаты, файлы в MSDesigners8 кажутся поврежденными. Я не думал устанавливать SQL Server 2008 R2 BIDS на виртуальной машине, чтобы получить копии DLL для размещения в этой папке, но я нашел решение, которое, похоже, работает: установка Visual Studio 2008 Shell (интегрированный режим) SP1.
До этого я переименовал папку MSDesigners8 в MSDesigners8_old (и файлы .dll также были переименованы .dllold. Я не думаю, что это обязательно, я включаю его здесь только в том случае, если это имеет значение). Я попытался восстановить, а также переустановить BIDS, но он не воссоздал папку MSDesigners8. Установка SP1 выполнена.
После этого может потребоваться переустановка BIDS, но это может не произойти. Удачи!
Я столкнулся с такой же ошибкой в Visual Studio Professional 2012 версии 11.0.61030.00 Update 4 и решил ее, перейдя в C:\Program Files (x86)\Common Files\microsoft shared\Visual Database Tools и переименовав dsref80.dll файл в desref80.old.dll, а затем запустить действие “Восстановить” при установке Visual Studio. При ремонте диалоговое окно восстановления Visual Studio сообщило мне, что не может найти источник пакета, так как у меня не было установочного диска, поэтому я просто выбрал параметр “Загрузить”, и он сработал. Это устанавливает соответствующую версию файла desref80.dll.
f вы думаете, что у вас может быть эта проблема, просто замените свои файлы копией с другой установки SQL Server 2008R2/Visual Studio 2008, которая работает следующим образом:
C:\Program Files (x86)\Common Files\microsoft shared\MSDesigners8\msddslm.dll
C:\Program Files (x86)\Common Files\microsoft shared\MSDesigners8\msdds.dll
C:\Program Files (x86)\Common Files\microsoft shared\MSDesigners8\msddsf.dll
C:\Program Files (x86)\Common Files\microsoft shared\MSDesigners8\msddslmp.dll
C:\Program Files (x86)\Common Files\microsoft shared\MSDesigners8\msddsp.dll
Иногда на компьютерах с видеокартами Nvidia, возникают ошибки, связанные с неработоспособностью библиотеки NVML.
Например, Claymore Dual miner при этом выдает ошибку такого вида:
NVIDIA NVML library not found, temperature monitoring for NVIDIA GPUs disabled
При этом майнер версии 15.0 работает, но не мониторит температуру, и не управляет параметрами видеокарты, связанными с ее нагревом. Другие программы из-за этой ошибки могут вообще не запуститься.
Существует много ошибок, связанных с поломанным nvml.dll, которые возникают на компьютере с Windows, например:
- nvml.dll не найден;
- отсутствует файл nvml.dll;
- nvml.dll нарушены права доступа;
- не удалось зарегистрировать файл nvml.dll;
- файл nvml.dll не найден;
- отсутствует необходимый компонент nvml.dll.
- не удалось запустить приложение, так как не найден файл nvml.dll…
Как избавиться от ошибки, связанной с неработоспособностью библиотеки NVIDIA NVML?
Обычно даже после использования «суперчистильщиков» системы файл nvml.dll все же остается в системе в директории C:\Windows\System32:
Обычно этого достаточно для устранения проблемы. Для большей уверенности, папку NVSMI с библиотекой nvml.dll можно создать в директории C:\Program Files (x86)\NVIDIA Corporation:
После этого программы, использующие библиотеку nvml.dll должны запускаться без проблем. Клеймор майнер в процессе запуска на системе с видеокартами Нвидиа покажет следующую информацию:
Ошибка 0x8007007E в Outlook
Когда эта ошибка появляется в клиенте Microsoft Outlook, она запрещает пользователю отправлять или получать любые электронные письма. Обычно это происходит по двум причинам – [1], когда конечный пользователь пытается перейти на Windows 10 и [2], если пользователь обновляется до следующей версии Office. Есть два способа решить эту проблему:
1] Восстановить/переустановить клиент Office Outlook:
Если восстановление Microsoft Outlook не помогает, вы можете установить почтовый клиент снова. Иногда обновление портит конфигурацию при изменении версии, и переустановка исправит это.
2] Запустите Outlook от имени администратора.
Найдите Outlook в меню программы, затем нажмите Shift + правой кнопкой мыши и выберите «Запуск от имени администратора».
Читайте также: