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

时间:2011-07-26 11:28:57

标签: 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. 

1 个答案:

答案 0 :(得分:1)

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

MSDN says this关于IMAGE_FILE_NET_RUN_FROM_SWAP

  

如果Image在网络上,请从交换文件中复制并运行。

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

因此,如果没有人为您完成这项工作,请自行完成:复制您的文件并运行它:)