Es wäre ja eigentlich mal eine nette Übung, das ganze nicht mit zwei Programmdateien zu lösen, sondern einfach mit zwei Prozessen: Man erzeuge für eine beliebige Programmdatei (zum Beispiel die eigene) einen zweiten Prozess mit eigener Prozessgruppe und ohne kontrollierende Konsole im gestoppten Zustand, unmappe die Programmdatei aus dem Adressraum des Prozesses, alloziere eine Seite virtuellen Speichers an die Basisadresse des Prozesses, schreibe dorthin einen Code, der darauf wartet, dass der "Elternprozess" stirbt und dann dessen ausführbare Datei löscht. Schließlich gebe man dem neuen Prozess das Startsignal und beende sich selbst. Das sollte funktionieren, denn der zweite Prozess hält ja die Programmdatei nicht mehr geöffnet, so dass man sie nach Ende des ersten Prozesses entfernen könnte. Mit dem
Win32::API Modul müsste all das sogar von Perl aus machbar sein -- jedenfalls wenn man keine Probleme damit hat, ein paar Dutzend Maschineninstruktionen als Zahlen einzugeben 8-P
Noch besser allerdings wäre es, wenn M$ es endlich schaffen würde, so wie der Rest der Welt eine vernünftige Semantik für Dateisystemzugriffe zu implementieren, so dass man die Datei einfach problemfrei löschen könnte ;-)
When C++ is your hammer, every problem looks like your thumb.