Laden...

.Exe nach ausführen löschen?

Erstellt von Fastkiller vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.489 Views
F
Fastkiller Themenstarter:in
47 Beiträge seit 2008
vor 15 Jahren
.Exe nach ausführen löschen?

Hallo,

Ich schreibe gerade an einem Programm bei dem der User auf das Programm klickt und es danach nicht mehr löschen muss. Es sollte sich also automatisch selber löschen.

Mein bisheriger versuch war das über eine .bat zu lösen, allerdings funktioniert dass nicht ganz so richtig:


            string lines = "":Repeat\n del ""+'""'+System.Environment.GetCommandLineArgs()[0]+'""'+""\nif exist \n""+'""'+System.Environment.GetCommandLineArgs()[0]+'""'+""\ngoto Repeat\nrmdir ""+System.Environment.SystemDirectory+'""'+""\ndel ""+'""'+System.Environment.GetCommandLineArgs()[0];

            // Write the string to a file.
            System.IO.TextWriter file = new System.IO.StreamWriter("C:\\test.bat");
            file.WriteLine(lines);
            file.Close();



            Process del = new Process();
            try
            {
                del.StartInfo.FileName = "C:\\test.bat";
                del.StartInfo.UseShellExecute = true;
                del.Start();
 
            }
            catch (Exception)
            {
                throw;
            }

Die erstellte bat sieht dann so aus:


:Repeat
 del "C:\Dokumente und Einstellungen\Fastkiller\Desktop\Test.exe"
if exist 
"C:\Dokumente und Einstellungen\Fastkiller\Desktop\Test.exe"
goto Repeat
rmdir C:\\"
del "C:\Dokumente und Einstellungen\Fastkiller\Desktop\yyyyy.exe


Ich weiß nicht ganz wo ich da nen fehler drin hab.. Nachdem die exe ausgefürt ist und ich danach manuell auf die von mir erstellte .bat klicke löscht sich das Programm. Allerdings tut es das nicht automatisch.

Nun meine Frage, ist es möglich eine exe die mittels C# geschrieben worden ist nach dem ausführen zu löschen? Oder ist dies unter Windows einfach nciht möglich?

Bin für jede Hilfe dankbar!

mfg,
Fastkiller

109 Beiträge seit 2008
vor 15 Jahren

du willst dein eigenes programm löschen, was gerade läuft? wie soll das gehen? mach das mal in form_closing rein dann löscht es das wahrscheinlich eher

F
Fastkiller Themenstarter:in
47 Beiträge seit 2008
vor 15 Jahren

Das funktioniert leider auch nicht...
Die batch datei sollte ja funktionieren, da sie wartet bis das programm nichtmehr läuft und es dann löscht..

Aber irgw funktioniert das nicht so ganz 🙄

5.658 Beiträge seit 2006
vor 15 Jahren

Kann mir nicht vorstellen, daß du eine Datei löschen kannst, die gerade ausgeführt wird.
Eine Alternative wäre, daß du den Befehl zum Löschen der Datei in die Registery als RunOnce einträgst, dann wird die Datei beim nächsten Hochfahren von Windows automatisch gelöscht.

So macht es jedenfalls der Unlocker, wenn er die Freigabe einer Datei nicht erzwingen kann. Übrigens kann selbst der Unlocker eine exe-Datei eines gerade ausgeführten Programms nicht löschen (außer beim Neustart).

Christian

Weeks of programming can save you hours of planning

B
293 Beiträge seit 2008
vor 15 Jahren

Mal ne ganz andere Idee. Wenn du dir ein zweites Projekt im VS anlegst und dort ein "unsichtbares" Formular erstellst, dass per Timer alle paar Sekunden im Taskmanager nach deiner Hauptapplikation sucht und sie, wenn sie nicht mehr vorhanden ist, löscht, sollte das ein wenig eleganter aussehen (der User bekommt keine CMD vorgesetzt) und das ist nicht so ne arg brutale "Hau-drauf"-Schleife wie deine Batch.

Die .exe des zweiten Projekt führst du dann einfach im Formclosing deiner ersten App aus.

So würde ich's lösen...

liebe Grüße,
ein blutiger Anfänger 😉

Wenn ich nicht hier bin, findest du mich auf code-bude.net.

1.820 Beiträge seit 2005
vor 15 Jahren

Hallo!

Geht es bzgl. des Lösch-Vorgangs um eine Sicherheitsfunktion oder eher um eine Art Aufräum-Vorgang?

Nobody is perfect. I'm sad, i'm not nobody 🙁

2.187 Beiträge seit 2005
vor 15 Jahren

Hallo Fastkiller,

Eine .exe per .bat zu löschen, ist auch mit .Net-.exe-Dateien möglich. Jedoch muss zuerst die Assembly (.exe) entladen werden, was die GarbageCollection irgend wann macht.
Entweder musst du mit der *.bat so lange Schleifen drehen, bis die *.exe gelöscht werden konnte oder es anders lösen.

Es ginge auch rein in C# (theoretisch). Du müsstest eine zweite AppDomain anlegen, in diese die Assembly per ShadowCopy laden und dann die original AppDomain entladen. Dann müsste man aus der zweiten AppDomain die Assembly löschen. (Kennt sich da jemand gut/besser aus.)

Gruß
Juy Juka

F
Fastkiller Themenstarter:in
47 Beiträge seit 2008
vor 15 Jahren

Danke für eure Antworten. Ich hab das jetzt so gelöst, dass ich mir einfach ne .bat aus meinem C# Programm erstelle und diese .bat einfach in einer schleife wartet bis meine .exe fertig ist. Allerdings ist das recht unschön da nebenbei sich Die DOS - Console öffnet und die ganze zeit wie ne endlosschleife der Text runterläuft.

3.825 Beiträge seit 2006
vor 15 Jahren

Hallo Fastkiller,

einfach umbenennen und dann löschen.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

1.696 Beiträge seit 2006
vor 15 Jahren

Hallo Fastkiller,

ist ja toll, du willst keine Leichen hinterlassen, aber die Batch-Datei ist danach immer noch da 😄. IMHO ist die Lösung mit Runonce die geeignetste.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo vbprogger,

eine Batch-Datei kann sich selber löschen.

Man kann mit Batch-Dateien sogar während der Ausführung ändern (z.B. Befehle anfügen) und das wirkt sofort, weil jeder Befehl einzeln aus der Batch-Datei geladen wird.

herbivore