Как сделать exe-файл, который удаляется из списка открытых файлов серверов при запуске (запускается из общего ресурса) - PullRequest
8 голосов
/ 26 июля 2011

Мне нужно сделать exe-файл, который будет запускаться с общего ресурса сервера Windows. Как только приложение запущено, оно должно исчезнуть из списка открытых файлов сервера.

Например, у меня есть этот простой исходный код Delphi в качестве теста - он компилируется в небольшой исполняемый 28k-файл, который просто ожидает ввода пользователя при вызове. Во время работы приложения оно появляется в списке открытых файлов серверов. Я уже пробовал установить 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 Ответ

1 голос
/ 26 июля 2011

Кажется, что IMAGE_FILE_NET_RUN_FROM_SWAP (или IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP) говорит Windows, что она должна загрузить весь EXE в память (подкрепленный файлом подкачки). Это не означает, что он копируется и затем запускается с локального диска, он просто предотвращает последующие сбои страниц, которые вызывают доступ к общему ресурсу (возможно, после размонтирования; см. Такой случай здесь ). Это, в свою очередь, означает, что файл на сетевом ресурсе остается открытым, пока он подключен и файл запущен.

MSDN говорит, что о IMAGE_FILE_NET_RUN_FROM_SWAP:

Если Image находится в сети, скопируйте и запустите из файла подкачки.

Я бы интерпретировал копию как копию в память , а не как копию на диск .

Так что, если никто не делает работу за вас, просто сделайте это самостоятельно: скопируйте файл и запустите его:)

...