Как устранить неполадки приложения не удалось запустить с 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-->

  1. скажите компоновщику задержать загрузку всех библиотек DLL, от которых зависит наше приложение (отложив любые проблемы инициализации до тех пор, пока приложение не запустится).
  2. упражнение приложение, пока оно не сломалось, что оказалось, когда comdlg32.dll была загружена для отображения диалогового окна "открыть".
  3. создать простую тестовую программу, которая просто использует comdlg32.файл DLL чтобы открыть диалоговое окно "открыть".
  4. запустите тестовую программу в 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 ) и перейдите к следующим шагам.

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