相关疑难解决方法(0)

在终端服务器上运行的Delphi 7应用程序的推荐PE头设置?

在调查在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)

delphi delphi-7 terminal-services

20
推荐指数
1
解决办法
7688
查看次数

如何使运行时从服务器打开文件列表中删除的exe(从共享启动)

我需要创建一个将从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)

windows delphi exe

8
推荐指数
1
解决办法
1910
查看次数

在 D2006 应用程序中获取外部异常 C0000006 - 如何强制 delphi 加载整个可执行文件?

我在退出我的应用程序时偶尔会遇到这个问题 - 我的应用程序正在通过网络运行 EXE。我知道这是按需加载部分 EXE 时的页面错误。

我也在 TDrawGrid 的 OnDrawCell 方法中观察到它,所以我很困惑这可能是如何导致页面加载的。此外,异常不断发生。

所以我的问题:

错误 C0000006 是否可能由其他原因导致?我对应用程序管理内存的方式进行了相当大的更改,尽管没有什么特别之处,而且我相信代码的行为。

如何让应用程序在启动时将其全部加载到内存中(在 Delphi 2006 中 - 我知道有针对更高版本的 Delphi 的指令)。

TIA

delphi executable exception delphi-2006 page-fault

2
推荐指数
1
解决办法
4290
查看次数