在调查在Windows 2008终端服务器上运行Delphi 7应用程序的一些用户报告的外部异常C0000006错误时,我发现了几个关于此问题和相关问题的问题.我想知道是否有人有这些设置的确切列表,这些设置适用于在终端服务器上运行的标准Delphi 7数据库应用程序.
我看过的问题包括:
到目前为止我还没有阅读这些内容,我认为我应该将以下内容添加到.dpr文件中:
const
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
// Following are already defined in D7's Windows.pas
IMAGE_FILE_RELOCS_STRIPPED = $0001;
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400;
IMAGE_FILE_NET_RUN_FROM_SWAP = $0800;
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED
or IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
or IMAGE_FILE_NET_RUN_FROM_SWAP}
Run Code Online (Sandbox Code Playgroud)
编辑:剥离重定位部分可能是不必要的,所以这是修订版本:
const
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
// Following are already defined in D7's Windows.pas
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400;
IMAGE_FILE_NET_RUN_FROM_SWAP = $0800;
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
or IMAGE_FILE_NET_RUN_FROM_SWAP}
Run Code Online (Sandbox Code Playgroud) 我需要创建一个将从Windows服务器共享启动的exe.应用程序运行后,它应立即从服务器打开文件列表中消失.
例如,我将这个简单的Delphi源作为测试 - 它编译成一个小的28k exe文件,在调用时只等待用户输入.当应用程序运行时,它将显示在服务器打开文件列表中.我已经尝试过PEFlags设置IMAGE_FILE_NET_RUN_FROM_SWAP和IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP:
program RunFromShare;
Uses
Windows;
{$APPTYPE CONSOLE}
{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP} // no exe file open on network share?
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
begin
WriteLn('Waiting for [Enter] key');
ReadLn;
end.
Run Code Online (Sandbox Code Playgroud) 我在退出我的应用程序时偶尔会遇到这个问题 - 我的应用程序正在通过网络运行 EXE。我知道这是按需加载部分 EXE 时的页面错误。
我也在 TDrawGrid 的 OnDrawCell 方法中观察到它,所以我很困惑这可能是如何导致页面加载的。此外,异常不断发生。
所以我的问题:
错误 C0000006 是否可能由其他原因导致?我对应用程序管理内存的方式进行了相当大的更改,尽管没有什么特别之处,而且我相信代码的行为。
如何让应用程序在启动时将其全部加载到内存中(在 Delphi 2006 中 - 我知道有针对更高版本的 Delphi 的指令)。
TIA
delphi ×3
delphi-2006 ×1
delphi-7 ×1
exception ×1
exe ×1
executable ×1
page-fault ×1
windows ×1