我们发布了Windows桌面应用程序(使用Visual C ++ 2013和v120_xp平台工具集构build),在Windows 10上运行良好,但是我们已经开始接收安装了“Threshold 2”更新的用户的报告,开始,显示以下错误消息:
应用程序无法正确启动(0xc0000142)。 单击确定closures该应用程序。
错误代码是STATUS_DLL_INIT_FAILED,所以我们可能正在寻找一个DLL无法初始化。
我们已经做了一些尝试,通过观察在debugging器中启动的应用程序来解决这个问题,并使用Process Monitor来查看哪些DLL正在被加载。 加载的最后一个DLL(在安装了Threshold 2的计算机上)是“davhlpr.dll”。 当我们看到我们的应用程序在没有Threshold 2的Windows 10上启动时,它启动时没有明显加载该DLL。 这表明这个问题可能与davhlpr.dll有关,但是我们的代码并不明确依赖于那个DLL,我不知道它是什么。
有没有其他人看到过这样的事情?
有没有人有任何想法,我们如何解决这个问题? 在尝试debugging器和进程监视器后,我没有想法。
我们最终得到了这个底部。 我们采取的做法如下:
长话短说:事实证明,失败是由于Windows组件被称为“fwbase.dll”(显然是Windows防火墙的一部分),comdlg32.dll试图加载出于某种原因。 我们的应用程序包含一个名为“fwBase.dll”(AMD Framewave库的一部分)的组件,并且Windows加载程序大概没有打算尝试加载fwbase.dll,因为它认为它已经加载。 之后不久就发生灾难。
在这一点上,我不知道这是Windows中的错误还是什么,但我们通过重命名fwBase.dll来解决它。