Windows 任务计划程序中的任务 0xC0000142 错误
0xC0000142 Errors from Tasks in Windows Task Scheduler
我以前有许多 C++ .exe 程序(使用 C++ Builder XE7 开发)运行在 Windows 2008 R2 数据中心服务器中作为计划任务。这些任务由 SYSTEM 帐户 运行 执行,我以前从未遇到过任何问题。
我最近将这些任务导入了新的 Windows 2019 数据中心服务器,并在任务计划程序中设置了这些任务。 运行 任务使用相同的 SYSTEM 帐户,但是使用更新的 Windows 服务器,这些任务现在给我一个 运行 结果 0xC0000142。
我在网上找到的大部分资源都说要在注册表编辑器中增加桌面堆大小 - 我已经多次这样做并在每次增加后重新启动服务器,但我仍然用这种方法得到相同的结果所以我将桌面堆大小重置为原始值。
我还认为这与缺少 C++ 可再发行组件有关 - 新服务器仅具有 2015-2019 年的可再发行组件,而 2008 R2 服务器具有这些以及 2013 年和 2008 年的可再发行组件。所以我安装了这些额外的可再发行组件,但是我仍然得到相同的结果。
我试过手动重新创建任务,我试过 运行使用不同的域管理员帐户执行任务,还尝试过“运行 仅当用户登录时 in/run用户是否登录”设置。所有这些都导致了相同的 0xC0000142 错误。
此外,Windows 任务计划程序历史记录或事件查看器中没有显示任何错误。
任何额外的 tips/guidance 将不胜感激!
编辑:
这是导致退出代码和任务失败的已过滤进程监视器日志的片段。
编辑 2:现在已经一个多月了,但仍在 运行 解决这些问题。我已将 C++ Builder 升级到 10.4,将我的旧代码移至新的 IDE,并重新链接所有 packages/include paths/library 路径。我还使用了原来的 .exe 文件,并将其拆分为具有多个 .exe 文件的多个任务 - 现在这些拆分任务中的大部分都是 运行ning,但有些仍然提供 0xC0000142 代码。我还尝试使用 GitHub - Dependencies App 中的这个工具 - 试图找出确切的 DLL 失败的原因,但它只是指向一些核心 Windows 系统 DLL(api-ms-win-....dll,ext-ms-win-....dll)。我觉得此输出具有误导性,有谁知道有更好的工具来确定丢失的 DLL 吗?
我解决了我的问题。在我的例子中,出现 0xC0000142 错误的程序使用的是 WININET。在我的 cpp 文件的顶部附近,我有 #pragma link "WININET.LIB"
。 Windows Server 2019 不支持 WININET 库,因此尝试使用它会导致某些系统 DLL 初始化失败。通过删除代码中的 #pragma link
语句和 replacing/removing 不必要的 WININET 函数,它允许我的程序在 Windows Server 2019 上 运行。
我以前有许多 C++ .exe 程序(使用 C++ Builder XE7 开发)运行在 Windows 2008 R2 数据中心服务器中作为计划任务。这些任务由 SYSTEM 帐户 运行 执行,我以前从未遇到过任何问题。
我最近将这些任务导入了新的 Windows 2019 数据中心服务器,并在任务计划程序中设置了这些任务。 运行 任务使用相同的 SYSTEM 帐户,但是使用更新的 Windows 服务器,这些任务现在给我一个 运行 结果 0xC0000142。
我在网上找到的大部分资源都说要在注册表编辑器中增加桌面堆大小 - 我已经多次这样做并在每次增加后重新启动服务器,但我仍然用这种方法得到相同的结果所以我将桌面堆大小重置为原始值。
我还认为这与缺少 C++ 可再发行组件有关 - 新服务器仅具有 2015-2019 年的可再发行组件,而 2008 R2 服务器具有这些以及 2013 年和 2008 年的可再发行组件。所以我安装了这些额外的可再发行组件,但是我仍然得到相同的结果。
我试过手动重新创建任务,我试过 运行使用不同的域管理员帐户执行任务,还尝试过“运行 仅当用户登录时 in/run用户是否登录”设置。所有这些都导致了相同的 0xC0000142 错误。
此外,Windows 任务计划程序历史记录或事件查看器中没有显示任何错误。
任何额外的 tips/guidance 将不胜感激!
编辑: 这是导致退出代码和任务失败的已过滤进程监视器日志的片段。
编辑 2:现在已经一个多月了,但仍在 运行 解决这些问题。我已将 C++ Builder 升级到 10.4,将我的旧代码移至新的 IDE,并重新链接所有 packages/include paths/library 路径。我还使用了原来的 .exe 文件,并将其拆分为具有多个 .exe 文件的多个任务 - 现在这些拆分任务中的大部分都是 运行ning,但有些仍然提供 0xC0000142 代码。我还尝试使用 GitHub - Dependencies App 中的这个工具 - 试图找出确切的 DLL 失败的原因,但它只是指向一些核心 Windows 系统 DLL(api-ms-win-....dll,ext-ms-win-....dll)。我觉得此输出具有误导性,有谁知道有更好的工具来确定丢失的 DLL 吗?
我解决了我的问题。在我的例子中,出现 0xC0000142 错误的程序使用的是 WININET。在我的 cpp 文件的顶部附近,我有 #pragma link "WININET.LIB"
。 Windows Server 2019 不支持 WININET 库,因此尝试使用它会导致某些系统 DLL 初始化失败。通过删除代码中的 #pragma link
语句和 replacing/removing 不必要的 WININET 函数,它允许我的程序在 Windows Server 2019 上 运行。