我需要创建一个将从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.
答案 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 解释为将复制到内存,而不是将复制到磁盘。
因此,如果没有人为您完成这项工作,请自行完成:复制您的文件并运行它:)