Comment faire un exe qui est supprimé de la liste des fichiers du serveur lors de son exécution (démarré à partir d’un partage)

Je dois faire un exe qui sera démarré à partir d’un partage de serveur Windows. Dès que l’application est en cours d’exécution, elle devrait disparaître de la liste des fichiers ouverts du serveur.

Par exemple, j’ai ce simple source Delphi comme test – il se comstack en un petit fichier exe de 28k qui attend simplement l’entrée de l’utilisateur lorsqu’il est appelé. Pendant l’exécution de l’application, elle apparaît dans la liste des fichiers ouverts du serveur. J’ai déjà essayé le paramètre PEFlags IMAGE_FILE_NET_RUN_FROM_SWAP et 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. 

Il semble que IMAGE_FILE_NET_RUN_FROM_SWAP (ou IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP ) indique à Windows qu’il devrait charger l’intégralité de l’EXE en mémoire (sauvegardé par le fichier d’échange). Cela ne signifie pas qu’il est copié puis exécuté à partir du disque local, il empêche simplement les erreurs de page de se produire plus tard, ce qui entraîne un access au partage (éventuellement après le déassembly; voir un tel cas ici ). Ce qui signifie à son tour que le fichier sur le partage réseau est toujours ouvert tant que le partage est connecté et que le fichier est en cours d’exécution.

MSDN dit ceci à propos de IMAGE_FILE_NET_RUN_FROM_SWAP :

Si Image est sur Net, copiez et exécutez à partir du fichier d’échange.

J’interpréterais la copie comme une copie dans la mémoire , pas comme une copie sur le disque .

Donc, si personne ne fait le travail pour vous, faites-le vous-même: copiez votre fichier et exécutez-le 🙂