Как устранить неполадки приложения не удалось запустить с DLL init состояния (0xc0000142) после обновления Windows 10 "Threshold 2" (1511, build 15086)
мы публикуем настольное приложение Windows (построенное с помощью Visual C++ 2013 с набором инструментов платформы v120_xp), которое отлично работало в Windows 10, но мы начали получать отчеты от пользователей, которые установили обновление "Threshold 2", которое наше приложение теперь не запускается, показывая следующее сообщение об ошибке:
приложение не удалось запустить правильно (0xc0000142). Нажмите кнопку ОК, чтобы закрыть приложение.
код ошибки STATUS_DLL_INIT_FAILED, поэтому мы, по-видимому, ищем DLL не удается инициализировать.
мы предприняли некоторые попытки устранить эту проблему, наблюдая за запуском приложения в отладчике и используя Process Monitor, чтобы увидеть, какие DLL загружаются. Последняя загруженная DLL (на машине с установленным порогом 2) - "davhlpr.файл DLL." Когда мы наблюдаем, как наше приложение запускается в Windows 10 без порога 2, оно запускается без загрузки этой DLL вообще. Это говорит о том, что проблема может быть как-то связана с davhlpr.dll, но наш код явно не зависит от этой DLL, и я понятия не имею, что это такое.
кто-нибудь еще видел что-нибудь подобное?
У кого-нибудь есть идеи о том, как мы можем устранить это? После попытки отладчика и монитора процессов у меня закончились идеи.
2 ответов
в конце концов, мы добрались до сути. Подход, который мы приняли, был следующим:--1-->
- скажите компоновщику задержать загрузку всех библиотек DLL, от которых зависит наше приложение (отложив любые проблемы инициализации до тех пор, пока приложение не запустится).
- упражнение приложение, пока оно не сломалось, что оказалось, когда comdlg32.dll была загружена для отображения диалогового окна "открыть".
- создать простую тестовую программу, которая просто использует comdlg32.файл DLL чтобы открыть диалоговое окно "открыть".
- запустите тестовую программу в Windows 10 build 15086 и посмотрите, какие библиотеки DLL она загружает, сравнивая это с библиотеками, которые загружаются при запуске диалогового окна "открыть" в загруженной с задержкой версии нашего приложения.
короче говоря: оказывается, сбой произошел из-за компонента Windows под названием "fwbase.dll " (часть Брандмауэра Windows, по-видимому), который comdlg32.dll пытался загрузить по какой-то причине. Наше приложение включает компонент с именем " fwBase.dll " (часть библиотеки AMD Framewave), и загрузчик Windows, по-видимому, не потрудился загрузить fwbase.dll, как он думал, что он уже загружен. Вскоре последовала катастрофа.
на данный момент я не уверен, что это ошибка в Windows или что, но мы решили ее, переименовав fwBase.файл DLL.
Я столкнулся с аналогичной проблемой, когда программа скомпилирована и запущена без каких-либо заминок на Win 7(также win 2008 server) ,но не удалось для машины Win 10.Один трюк, который сработал для меня, состоял в том, чтобы "устранить неполадки" exe(используя Win 10 OS).
- щелкните правой кнопкой мыши исполняемый файл и выберите опцию "Устранение неполадок совместимости".
- затем выберите "Устранение неполадок программы", а затем выберите " программа работала в более ранней версии Windows."(1-й флажок.)
- выберите ОС (моя была Win 7 ) и перейдите к следующим шагам.
обязательно "протестируйте программу" и перейдите дальше, чтобы, наконец, выбрать опцию "Сохранить настройки".