Schrift
[thread]10670[/thread]

Datei löscht sich selber

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
theresa
 2007-10-26 14:43
#101387 #101387
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Mit einer normalen .pl Datei geht das schon (system("del c:\\datei.pl")), ich hab aber daraus eine .exe gemacht und dann geht es nicht mehr.
(für die .exe habe ich im Skript natürlich datei.exe anstatt datei.pl geschrieben)
Kennt jemand einen Trick den ich da einsetzen könnte?
nepos
 2007-10-26 14:46
#101388 #101388
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Meines Wissens sperrt Windows Dateien, die gerade ausgeführt werden. Wie man das umgehen könnte, keine Ahnung.
theresa
 2007-10-26 14:47
#101389 #101389
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Das hatte ich mir schon vorgestellt, deswegen fragte ich nach einem Trick.
theresa
 2007-10-26 14:53
#101391 #101391
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Fällt mir ein mit dem Skript eine .bat Datei zu erzeugen, die dann den Skript löscht und sich selbst (.bat Dateien können es doch). Werde es gleich versuchen!
Edit: geht nicht, denn während diese Datei ausgeführt wird ist die .exe noch aktiv... kann also auch nicht gelöscht werden. Falls jemand eine bessere Idee hat...

Es funktioniert wenn man eine .bat Datei erstellt, die zuerst die .exe ausführt und dann eine andere Datei, die die .exe löscht. Das Problem hier ist dass die .bat ein cmd fenster öffnet, bis dass die .exe Datei fertig ist, und dass will ich nicht.

Vielleicht weiß jemand ob es möglich ist, dass der Skript einem anderen Prozess die Kontrolle übergibt, sich also beendet und das andere startet?
So würde sich das Skript "beenden" sobald er die .bat Datei (mit system()) startet.
Dann könnte ich ihn auch mit der .bat löschen.
#Kein Kommentar
 2007-10-26 15:21
#101393 #101393
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
du kannst anstatt dem system-befehl, den exec ()-befehl benutzen, der ruft ein anderes programm auf und schließt das eigene script
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
theresa
 2007-10-26 15:28
#101394 #101394
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
So etwas hätte ich gebrauchen können, funktioniert aber wieder nicht, die exe-Datei bleibt weiterhin gesperrt... :(
theresa
 2007-10-26 15:55
#101399 #101399
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Hier der Code dazu...
(Die Datei die ausgeführt wird ist die mit pp erstellten exe)
Code: (dl )
1
2
3
4
5
6
open($datei, ">c:\\test.bat");
#print $datei "psk cmd";
print $datei "del c:\\test.exe\n";
print $datei "del c:\\test.bat";
close($datei);
exec("c:\\test.bat");


Anscheinend ist der Prozess, der auf test.exe zugreift, das cmd Fenster womit test.exe gestartet wird...
Mit psk kann man Prozesse in Windows killen.
Wenn ich aber cmd beende, ist alles weg, auch die Ausführung der .bat Datei...

Hier komme ich definitiv nicht mehr weiter.
theresa
 2007-10-26 17:14
#101411 #101411
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Na gut... ich hab einen "Trick" gefunden.
Hab eine .bat erstellt, die die .exe ausführt, und danach löscht.

Dafür dass man das cmd fenster nicht sieht, habe ich die bat-Datei auch in eine .exe umgewandelt... mit einem Programm wo man einstellen kann ob die Anwendung sichtbar werden soll oder nicht...
murphy
 2007-10-26 19:58
#101424 #101424
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
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 CPAN: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.
Gast Gast
 2007-10-26 21:29
#101429 #101429
Es wäre sicherlich eine nette Übung.
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-10-26 14:43.