我们的一个客户遇到了这样的问题:当我们的软件尝试执行控制台程序时,有时会出现错误 0xc0000142(应用程序无法正确初始化)。
由于控制台程序在手动启动时运行正常,因此可以排除感染系统文件的病毒。此外,它是公司网络中的计算机,无法直接访问互联网,并且受到 IT 的严格管理(用户权限较低,必须请求 IT 安装程序等)。
经过一些研究我发现了这一点: http://blogs.technet.com/b/askperf/archive/2007/07/24/sessions-desktops-and-windows-stations.aspx
简而言之: http://support.microsoft.com/kb/824422/en-us
我们已经尝试过这个,但是没有用。我们增加了非交互式桌面的堆大小,但是错误仍然出现。
但错误的条件与知识库文章中相同: - 计算机运行数天而没有任何重新启动 - 许多进程在此计算机上运行 - 该进程以“静默”方式执行(因此它应该在非交互式桌面空间中运行)
该计算机采用的是 Windows 7 x64 SP1 操作系统,但崩溃的控制台程序却是 x86 架构的。
有什么想法可以解决这个问题吗?
答案1
这是一个相当广泛的主题,仅使用操作系统和错误,但是我将如何排除故障:
该错误是来自事件日志还是其他地方(在发生故障时是否可以获取事件日志中任何错误的副本)?
您是否设置了任何 perfmon 来检查崩溃期间是否有任何 CPU/内存峰值?
您可以尝试从命令提示符运行 SFC /SCANNOW,这可能会解决任何潜在的操作系统问题。
您可以通过手动运行程序来复制该问题吗?
答案2
对于那些也遇到此问题的人:我没有找到通过 Windows 配置或类似方法的解决方案。该程序(由我编写)仅从 kernel32.dll 导入函数(这应该始终有效)。但是 kernel32.dll 有时在远程桌面系统上不可用。
我的解决方案是将源代码(来自 EXE)放入 DLL 中。主机进程现在调用 DLL 而不是 EXE。由于此 DLL 在执行时不会导致新进程(代码在进程内运行),因此该错误不再出现在远程桌面系统上。所以就我而言,问题已解决。