当我在网络上安装新版本的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文件。
答案 0 :(得分:0)
PE标志
创建进程时,可执行文件将映射到内存中。这些可执行文件与其他虚拟内存(如堆栈或堆内存)一样保存在虚拟内存页中。
如果其他地方需要内存,虚拟内存管理器可能会决定从物理内存中卸载页面。这可能发生在您的可执行文件页面上。
另一种情况是可执行文件根本不在物理内存中。进程启动并映射页面按需加载。如果未触及可执行文件的某些部分,则不会从磁盘中获取它们。
如果文件驻留在可移动媒体上或网络卷上,则可能会导致问题。运行进程可能无法访问自己的可执行文件的内存。这会导致运行时失败。
这些PE标志强制将可执行文件复制到交换文件并从那里映射。该副本在创建过程期间发生,并且可能很昂贵。
这些PE旗帜根本不会帮助你。如果您启动该过程并且网络不可用,则您必须使用的只是脱机副本。包含这些PE标志,您只需获取加载程序即可将脱机副本复制到交换文件中。具有相同的最终结果。
阻止缓存可执行文件
在您得到答案之前,您需要清楚地了解导致您观察到的行为的原因。因为它存在你怀疑脱机文件,但我没有看到这是原因的证据。也许这背后还有别的东西。也许您的文件服务器配置错误。真的,可能会有各种各样的解释。
您可能需要退后一步并准确诊断问题,而不是将PE标记添加到可执行文件中。一旦你知道问题是什么,那么你就可以尝试解决它。