如何在 Windows 10“阈值 2”更新(1511,内部版本 15086)后解决应用程序无法以 STATUS_DLL_INIT_FAILED (0xc0000142) 启动的问题

Posted

技术标签:

【中文标题】如何在 Windows 10“阈值 2”更新(1511,内部版本 15086)后解决应用程序无法以 STATUS_DLL_INIT_FAILED (0xc0000142) 启动的问题【英文标题】:How to troubleshoot app failing to start with STATUS_DLL_INIT_FAILED (0xc0000142) after Windows 10 "Threshold 2" update (1511, build 15086) 【发布时间】:2015-11-18 14:29:32 【问题描述】:

我们发布了一个 Windows 桌面应用程序(使用 Visual C++ 2013 和 v120_xp 平台工具集构建),该应用程序在 Windows 10 上运行良好,但我们已经开始收到安装了我们应用程序“阈值 2”更新的用户的报告现在无法启动,显示以下错误消息:

应用程序无法正确启动 (0xc0000142)。单击“确定”关闭应用程序。

错误代码是 STATUS_DLL_INIT_FAILED,因此我们可能正在寻找未能初始化的 DLL。

我们已尝试通过在调试器中观察应用程序启动并使用进程监视器查看正在加载哪些 DLL 来解决此问题。最后加载的 DLL(在安装了 Threshold 2 的机器上)是“davhlpr.dll”。当我们看到我们的应用程序在没有阈值 2 的情况下在 Windows 10 上启动时,它在没有明显加载该 DLL 的情况下启动。这表明问题可能与 davhlpr.dll 有关,但我们的代码并未明确依赖该 DLL,我不知道它是什么。

有没有其他人见过这样的事情?

有人对我们如何解决此问题有任何想法吗?在尝试了调试器和进程监视器之后,我没有想法了。

【问题讨论】:

davhlpr.dll 似乎用于 WebDAV (msdn.microsoft.com/en-us/library/windows/desktop/dd408159.aspx)。调试器中的调用堆栈可能会提供一些线索,说明是什么触发了它被加载。 【参考方案1】:

我们最终找到了问题的根源。我们采取的方法如下:

    告诉链接器延迟加载我们的应用程序所依赖的所有 DLL(将任何初始化问题推迟到应用程序启动之后)。 运行应用程序直到它崩溃,结果证明是在加载 comdlg32.dll 以显示“打开”对话框时。 创建一个简单的测试程序,只是使用 comdlg32.dll 来显示“打开”对话框。 在 Windows 10 build 15086 上运行测试程序并观察它加载了哪些 DLL,并将其与我们在延迟加载版本的应用中触发“打开”对话框时加载的 DLL 进行比较。

长话短说:事实证明,失败是由于 comdlg32.dll 出于某种原因试图加载的名为“fwbase.dll”(显然是 Windows 防火墙的一部分)的 Windows 组件造成的。我们的应用程序包含一个名为“fwBase.dll”的组件(AMD Framewave 库的一部分),Windows 加载程序可能不会费心尝试加载 fwbase.dll,因为它认为它已经加载了。此后不久,灾难接踵而至。

目前,我不确定这是 Windows 中的错误还是什么,但我们通过重命名 fwBase.dll 解决了它。

【讨论】:

【参考方案2】:

我遇到了类似的问题,一个程序在 Win 7(也是 Win 2008 服务器)上编译和启动没有任何问题,但在 Win 10 机器上失败了。对我有用的一个技巧是对 exe 进行“疑难解答” (使用 Win 10 操作系统)。

右键单击可执行文件并选择“疑难解答兼容性”选项。 然后选择“疑难解答程序”,然后选择“在早期版本的 Windows 中运行的程序”。 (第一个复选框。) 选择操作系统(我的是 Win 7)并继续下一步。

确保“测试程序”并进一步移动以最终选择“保存设置”选项。

【讨论】:

以上是关于如何在 Windows 10“阈值 2”更新(1511,内部版本 15086)后解决应用程序无法以 STATUS_DLL_INIT_FAILED (0xc0000142) 启动的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭 Fedora 15 Linux的自动更新。请说明用那条指令就OK了、!

7-15 计算圆周率(15 分)

如何彻底禁止win10易升更新(转)

如何在 MAC OS Catalina 10.15.5 上更新应用程序加载器?

Windows 10 更新后VMware Workstation pro无法运行 (无需卸载原版本VM)

如何设置windows自动更新的安装目录?