针对运行在终端服务器上的Delphi 7应用程序的推荐PE头设置? [英] Recommended PE header settings for Delphi 7 application running on terminal server?

查看:490
本文介绍了针对运行在终端服务器上的Delphi 7应用程序的推荐PE头设置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在调查Windows 2008终端服务器上运行Delphi 7应用程序的一些用户报告的外部异常C0000006错误时,我已经发现了有关此问题和相关问题的几个问题。我想知道是否有人有这些设置的明确列表,这适用于在终端服务器上运行的标准Delphi 7数据库应用程序。



我有问题查看包含:





在阅读这些文件之前,我以为我应该将以下内容添加到.dpr文件中: / p>

  const 
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $ 8000;
//以下已经在D7的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
或IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
或IMAGE_FILE_NET_RUN_FROM_SWAP}
/ pre>

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

  const 
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $ 8000;
//以下已经在D7的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
或IMAGE_FILE_NET_RUN_FROM_SWAP}


解决方案

  {$ SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE} 
{$ SetPEFlags IMAGE_FILE_RELOCS_STRIPPED
或IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
或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。


While investigating external exception C0000006 errors reported by some users running a Delphi 7 application on a Windows 2008 terminal server, I found several questions on this and related issues already. I'm wondering if anyone has a definitive list of these settings that would be appropriate for a standard Delphi 7 database application running on a terminal server.

The questions I've looked at include:

So far from reading these I'm thinking I should add the following to the .dpr file:

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}

Edit: Stripping the relocation section is probably unnecessary, so here's the revised version:

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}

is fine for your needs. I suspect that IMAGE_FILE_NET_RUN_FROM_SWAP is what you need to deal with C0000006. That error typically happens when you run from a network drive and the drive is not able to satisfy a page in request for the executable.

The other PE flags are fine for you either way. I would have it as you do.

As for whether or not IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE is right, only you know. Does you app meet the requiresments to be considered a non-legacy app for terminal services, as documented on MSDN? If so, use IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE.

这篇关于针对运行在终端服务器上的Delphi 7应用程序的推荐PE头设置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆