| 

.NET C# Java Javascript Exception

1
Hallo,

ich möchte eine Batch-datei schreiben die eine Temporäre datei anlegt und sobald das Programm auf irgendeiner art und weise beendet wird (Taskmanager, Titelleiste [X]).

Bisher funktioniert es nur in der Form wenn man das Programm mit einer bestimmten Taste beendet, das auch die datei gelöscht wird.
Code:
:exit
del New.txt
exit


Kann mir jemand helfen?
News:
23.06.2011
vicon 308 1 8
Auf die Beantwortung dieser Frage war ein Kopfgeld in Höhe von 50 Reputationspunkten ausgesetzt. Das Kopfgeld wurde bereits vergeben.
4 Antworten
5
Aus meiner Sicht ist das nur mit Batch-Mechanismen schwierig oder gar nicht möglich, da es KEINEN sogenanten Shutdown Hook für den Kommandozeilen-Interpeter gibt, der abschließende Aufgaben nach dem Abbruch eines Batches durchführen kann, wie z.B. das Löschen von temporären Dateien.

Ich habe habe eine etwas umständliche Lösung in Kombination mit einem VBScript.

Einstieg.cmd:
echo xxxxx > dummy.txt
cmd /C "Container.vbs"
del dummy.txt

Container.vbs:
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "Skript.cmd",,True

Skript.cmd
:loop
ping -n 3 localhost> nul
goto loop


Über Einstieg.cmd wird die ganze Sache gestartet. Hier wird auch die dummy-Datei erstellt und gelöscht.

Das VBScript wurde von mir eingeführt, um die lästige Abfrage "Batchvorgang abbrechen" bei verschachtelten Batch-Aufrufen zu verhindern.
23.06.2011
oopexpert 455 1 8
2
no can do.

Die Win32 API CreateFile stellt aber das Flag FILE_FLAG_DELETE_ON_CLOSE bereit, das diese Dateisemantik implementiert.
24.06.2011
devio 302 3
Die Umsetzung auf das konkrete Problem wäre interessant.
oopexpert 24.06.2011
1
DAS BODYGUARD PRINZIP. Das Programm soll ein zweites Programm starten das eigentlich nur das Mutterprogramm auf Existenz überwacht und die zu löschende Datei. Verschwindet das Mutterprogramm wird erst die Datei gelöscht und dann begeht das Überwachungsprogramm Selbstmord. :)) Wenn es Bomben-sicher sein soll dann starte zwei Bodyguards, wird einer der Bodyguards gekillt starte einen neuen Bodyguard. Verschwindet das Mutterprogramm begehen beide Bodyguards Selbstmord nachdem sie die zu löschende Datei gelöscht haben.
17.01.2013
ecxod 11 1
Die Idee an sich ist nicht schlecht, außer das die Überwachung eine ganze Menge Rechenkapazität verbraucht, ich habe ein anderes Projekt gehabt das ich einstellen musste, weil die Rechenlast für ein Programm einfach zu hoch war. Das Problem ist, das wenn ein Bodyguard selbstmord begeht, der andere sich jedoch aus dem Speicher auch löschen muss, und das geht halt nicht. Ohne Eingreifen des Benutzers bleibt ein Teil davon immer vorhanden, da glaube ich gibt es keine Lösung.
vicon 21.01.2013
0
Ich verstehe ehrlich gesagt das Problem nicht.

@echo off
echo Erstelle Datei
echo Running... > c:\flag.txt

notepad.exe

echo Lösche Datei
del c:\flag.txt

Wenn ich diese Batchfile laufen lasse, dann wird eine Datei erstellt, Notepad gestartet und nach dem Beenden des Notepad Anwendung (egals ob durch Menü, Close Box oder Task Manager) wird die Datei wieder gelöscht.

Wo mache ich hier einen Denkfehler?
27.06.2011
Jaksa 4,0k 1 8
ich weiß nicht, bei mir funktioniert das wie gesagt nicht keine Ahnung warum, wenn ich mein Batch Programm über Batchmenü beende dann wird die datei gelöscht, anders aber nicht
vicon 03.07.2011
1
Das Problem ist nicht das Beenden von Notepad, sondern das Beenden (z.B. über X) eines Batches. Im Endeffekt muss man den Batch in einem anderen Batch verpacken, wie Du notepad.exe in einem Batch verpackst. Bei Batches kommt dann noch diese Fragen nach dem Abbruch. Die habe ich in meiner Lösung durch ein VBScript unterdrückt.
oopexpert 11.07.2011

Stelle deine Batch-datei-Frage jetzt!