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

Delphi 应用程序版本已更新,但由于脱机文件而执行旧版本,delphi,networking,version,offline,Delphi,Networking,Version,Offline,当我在网络上安装Delphi 7.0应用程序的新版本,并在客户端桌面上重新启动应用程序时,它有时会执行以前的版本,但修改日期是新版本 在谷歌搜索之后,我发现Windows脱机文件有时会导致这种情况,因此我在我的.dpr中添加了以下PE标志 const IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000; // Following are already defined in D7's Windows.pas IMAGE_FIL

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

在谷歌搜索之后,我发现Windows脱机文件有时会导致这种情况,因此我在我的.dpr中添加了以下PE标志

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}
即使我添加了这些标志,我(有时——它不是真正可复制的)仍然有相同的问题


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

PE标志

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

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

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

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

这些PE标志强制将可执行文件复制到交换文件并从交换文件映射。复制发生在流程创建过程中,成本可能很高

这些PE标志对你毫无帮助。如果启动该过程而网络不可用,则只需使用脱机副本即可。包括这些PE标志,您只需让加载程序将脱机副本复制到交换文件。结果是一样的

防止缓存可执行文件

在你得到答案之前,你需要对你所观察到的行为的原因做出清晰的诊断。就目前情况而言,你怀疑离线文件,但我看不到这是原因的证据。也许这背后还有别的原因。可能您的文件服务器配置错误。真的,这可能有各种各样的解释


您确实需要后退一步,准确地诊断问题,而不是向可执行文件添加PE标志。一旦您知道问题所在,您就可以尝试解决它。

谢谢您的回复。我将更具体地说:文件驻留在网络上。桌面1正在运行该文件(如版本1);桌面2也在运行版本1。我将版本更新为v2。我要求desktop1和Desktop2关闭可执行文件并重新启动它。桌面1现在运行v2,但桌面2以某种方式运行v1。即使重新启动后,它仍然运行v1。当我将v2从网络位置复制到另一个子文件夹,然后从desktop 2重新运行它时,它最终运行v2,我不认为您需要更具体。问题已经很清楚了。你问PE标志是什么意思。你的意思是问另一个问题吗?我问题的最后一点是:“如何防止windows在从网络路径运行时“缓存”我的exefile”步骤1:诊断问题。我想我应该预料到这个问题会这样发展。你问过体育标志,但实际上你似乎并不在乎。当问到错误的问题时,这会让人沮丧。同步中心->管理脱机文件->查看脱机文件。如果你没有可执行文件,你就走错了方向。