应用程序版本已更新,但由于脱机文件而执行旧版本

时间:2015-01-20 14:14:31

标签: delphi networking version offline

当我在网络上安装新版本的Delphi 7.0应用程序并在客户端桌面上重新启动应用程序时,它有时会执行以前的版本,但修改日期是新版本...

经过一些googleing后我发现Windows Offline Files有时会导致这种情况,因此我将以下PE标志添加到我的.dpr

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}

即使我添加了这些标志i(有时 - 它不是真正可重复的)仍然有相同的问题。

有人可以解释这些PE标志的作用以及如何防止Windows在从网络路径运行时“缓存”我的exe文件。

1 个答案:

答案 0 :(得分:0)

PE标志

创建进程时,可执行文件将映射到内存中。这些可执行文件与其他虚拟内存(如堆栈或堆内存)一样保存在虚拟内存页中。

如果其他地方需要内存,虚拟内存管理器可能会决定从物理内存中卸载页面。这可能发生在您的可执行文件页面上。

另一种情况是可执行文件根本不在物理内存中。进程启动并映射页面按需加载。如果未触及可执行文件的某些部分,则不会从磁盘中获取它们。

如果文件驻留在可移动媒体上或网络卷上,则可能会导致问题。运行进程可能无法访问自己的可执行文件的内存。这会导致运行时失败。

这些PE标志强制将可执行文件复制到交换文件并从那里映射。该副本在创建过程期间发生,并且可能很昂贵。

这些PE旗帜根本不会帮助你。如果您启动该过程并且网络不可用,则您必须使用的只是脱机副本。包含这些PE标志,您只需获取加载程序即可将脱机副本复制到交换文件中。具有相同的最终结果。

阻止缓存可执行文件

在您得到答案之前,您需要清楚地了解导致您观察到的行为的原因。因为它存在你怀疑脱机文件,但我没有看到这是原因的证据。也许这背后还有别的东西。也许您的文件服务器配置错误。真的,可能会有各种各样的解释。

您可能需要退后一步并准确诊断问题,而不是将PE标记添加到可执行文件中。一旦你知道问题是什么,那么你就可以尝试解决它。​​