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

Pet*_*zki 8 windows delphi 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)

Hei*_*cht 1

看起来IMAGE_FILE_NET_RUN_FROM_SWAP(或IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP) 告诉 Windows 它应该将整个 EXE 加载到内存中(由交换文件支持)。这并不意味着它被复制然后从本地磁盘运行,它只是防止稍后发生页面错误,从而导致对共享的访问(可能在卸载之后;请参阅此处的这种情况。这反过来意味着,只要共享连接并且文件正在运行,网络共享上的文件仍然处于打开状态。

MSDN 是这么说IMAGE_FILE_NET_RUN_FROM_SWAP

如果映像位于网络上,请从交换文件复制并运行。

我将复制解释为复制到内存,而不是复制到磁盘

因此,如果没有人为您做这项工作,您只需自己做:复制您的文件并运行它:)