最近,我们的 RDP 服务器出现了一些问题。
远程用户将使用RDP 服务器连接到应用程序服务器,而在建筑物内的用户将直接连接到应用服务器。
最近的问题是,远程用户使用RDP 服务器连接到应用程序服务器,将得到 C0000006 外部异常错误。当第一个用户得到这个错误时,错误会慢慢蔓延到其他用户,直到所有使用程序#1和程序#2收到 C0000006 错误。重新启动RDP 服务器大部分情况下都能解决问题。
我不确定是什么问题会导致这两个程序(它们相互通信)出现 C0000006 错误,但通常用户遇到此问题的第一个先兆是程序#1和程序#2在任务管理器中显示空白,如下所示:
我知道这不太可能,但你知道是什么原因造成的吗?似乎是RDP 服务器和应用程序服务器。IT 部门很乐意在我们这边修复这个问题,但如果这实际上是一个编程错误,那么这是第三方顾问的编程修复,必须由他们来处理。
答案1
当您的程序将更多 EXE 数据分页到内存中但无法完成时,就会出现 0xC0000006 错误。这通常是由于尝试读取数据时出现 I/O 问题而导致的。
因此,请确保应用服务器和 RDP 服务器之间的连接稳定,并且应用服务器中的存储能够快速响应并发送数据。基本上,您不希望出现意外掉线或进入 RDP 服务器的数据长时间延迟。
另一个选项(或附加操作),因为根据屏幕截图中显示的图标来判断,由于该应用程序是用 Delphi 编写的,所以可以重新编译它以包含一个标题,该标题将告诉 Windows 一次将整个程序加载到内存中,避免以后需要分页数据,从而避免错误...
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}
并确保Winapi.Windows
包含在该Uses
部分中。
如果程序位于可移动驱动器(即闪存驱动器)上,则第一个标志告诉它将其完全加载到内存中;如果程序位于网络共享上(您的程序可能位于网络共享上),则第二个标志告诉它执行此操作。
有关更多信息,请访问 StakcOverflow: