在调查Windows 2008终端服务器上运行Delphi 7应用程序的一些用户报告的外部异常C0000006错误时,我已经发现了有关此问题和相关问题的几个问题。我想知道是否有人有这些设置的明确列表,这适用于在终端服务器上运行的标准Delphi 7数据库应用程序。
我看过的问题包括:
> External exception C0000006
> Delphi – invalid stream format errors on run
> Are there risks associated with IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP?
> Delphi TOpenDialog hangs in windows 2008 when run as remote desktop application
> Delphi 2007 : How to Set TSAWARE?
> How can I force Delphi 7 to load the whole executable?
在阅读这些文件之前,我想我应该把以下内容添加到.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}
编辑:剥离重定位部分可能是不必要的,所以这里是修改版本:
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}
解决方法
{$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}
对你的需要很好我怀疑IMAGE_FILE_NET_RUN_FROM_SWAP是您需要处理的C0000006。当您从网络驱动器运行并且驱动器无法满足可执行文件请求中的页面时,通常会发生该错误。
其他PE标志对你来说都是好的。我会像你一样拥有它。
至于IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE是否正确,只有您知道。您是否符合要求,被视为终端服务的非遗留应用程序,为documented on MSDN?如果是这样,请使用IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE。