22

在调查一些在 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}

编辑:剥离重定位部分可能是不必要的,所以这里是修订版:

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}
4

1 回答 1

8
{$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对不对,只有你自己知道。您的应用程序是否满足被视为终端服务的非传统应用程序的要求,如MSDN 中所述?如果是这样,请使用 IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE。

于 2014-01-15T22:53:42.287 回答