针对运行在终端服务器上的Delphi 7应用程序的推荐PE头设置? [英] Recommended PE header settings for Delphi 7 application running on terminal server?
问题描述
在调查Windows 2008终端服务器上运行Delphi 7应用程序的一些用户报告的外部异常C0000006错误时,我已经发现了有关此问题和相关问题的几个问题。我想知道是否有人有这些设置的明确列表,这适用于在终端服务器上运行的标准Delphi 7数据库应用程序。
我有问题查看包含:
- 外部例外C0000006
- Delphi - 运行时无效的流格式错误
- 与IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP或IMAGE_FILE_NET_RUN_FROM_SWAP相关联的风险?
- Delphi TOpenDialog在Windows 2008中挂起,当作为远程桌面应用程序运行时
- Delphi 2007:如何设置TSAWARE?
- 如何强制Delphi 7加载整个可执行?
在阅读这些文件之前,我以为我应该将以下内容添加到.dpr文件中: / p>
const
/ pre>
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}
编辑:剥离重定位部分可能是不必要的,所以这里是修订版本:
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:
- 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?
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屋!