Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Anwendungsordner löschen (https://www.delphipraxis.net/86774-anwendungsordner-loeschen.html)

xZise 19. Feb 2007 16:35


Anwendungsordner löschen
 
Wie kann ich den Ordner löschen in dem sich die Anwendung befindet, welches dieses Auftrag gibt?

DGL-luke 19. Feb 2007 16:37

Re: Anwendungsordner löschen
 
Ähm... "Wie säge ich den Ast ab, auf dem ich sitze?"

Gibt vielzählige Möglichkeiten, in den "Wie kann sihc mein Programm selbst aus dem internet updaten" solltest du alle finden.

PS: Gehts um nen Uninstaller?

Jelly 19. Feb 2007 16:40

Re: Anwendungsordner löschen
 
Selbst löschen geht nur indirekt, am einfachsten über eine Batch File. Ein Batch File hat den Vorteil, dass es sich selbst löschen kann.

xZise 19. Feb 2007 16:42

Re: Anwendungsordner löschen
 
Sozusagen ;) Weil mein Programm nistet sich auch in die Anwendungsdaten ein ;) Deshalb habe ich sozusagen eine "Selbstzerstörungsfunktion" ;) eingebaut... Nur ist es ja nicht so einfach die Anwendung die läuft zu löschen (PS: Die Uninstaller müssens irgendwie ja können ...)

@ Jelly: Wie sieht eine Batchdatei aus?

shmia 19. Feb 2007 16:43

Re: Anwendungsordner löschen
 
Es ist klar, eine Anwendung kann nicht sofort sein eigenes Programm-Verzeichnis löschen,
denn die EXE-Datei ist ja noch im Zugriff.
Deshalb kann das Verzeichnis erst beim Reboot gelöscht werden:
Delphi-Quellcode:
MoveFileEx(PChar(Verzeichnis), nil, MOVEFILE_DELAY_UNTIL_REBOOT);

xZise 19. Feb 2007 16:46

Re: Anwendungsordner löschen
 
Zitat:

Zitat von shmia
Deshalb kann das Verzeichnis erst beim Reboot gelöscht werden:
Delphi-Quellcode:
MoveFileEx(PChar(Verzeichnis), nil, MOVEFILE_DELAY_UNTIL_REBOOT);

Geht das nicht ein bisschen früher :P

Jelly 19. Feb 2007 16:51

Re: Anwendungsordner löschen
 
Zitat:

Zitat von xZise
Wie sieht eine Batchdatei aus?

Dabei handelt es sich um die 30 Jahre .bat Dateien. Könnte z.B. so aussehen.

Datei loeschen.bat

Code:
del DeineAnwendung.exe
del loeschen.bat
Vergiss aber nicht, deine Anwendung nach Aufruf der Batch zu schliessen.

xZise 19. Feb 2007 16:53

Re: Anwendungsordner löschen
 
Und um den Ordner zu entfernen? (<<< Deldir?)
Kann ich die Batchdatei mit ShellExecute ausführen? (<<< könnt ich testen ;))

DGL-luke 19. Feb 2007 16:56

Re: Anwendungsordner löschen
 
1. deltree
2. ja

3. ich würd noch n sleep reintun... oder wie heißt das bei batch?

EDIT: deltree ist das ganze rekurssiv, del müsste auch mit nem ordner funzen

igel457 19. Feb 2007 16:57

Re: Anwendungsordner löschen
 
Führe mal die "cmd.exe" aus und gebe "help" ein. Dann wirst du über alle Befehle, die es gibt aufgeklärt, auch wie man ein Verzeichnis löscht.

xZise 19. Feb 2007 17:27

Re: Anwendungsordner löschen
 
Also ich habe da so meine Probleme :P
Das ist meine ".bat"
Zitat:

del "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\Project1.exe"
del "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\UNINSTALL.bat"
rd "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)"
wenn ich die jetzt ausführe (Doppelklick im Explorer oder über die cmd), dann sagt er:
Zitat:

C:\Dokumente und Einstellungen\xZise\Desktop>"C:\Dokumente und Einstellungen\xZi
se\Desktop\Neuer Ordner (2)\UNINSTALL.bat"

C:\Dokumente und Einstellungen\xZise\Desktop>del "C:\Dokumente und Einstellungen
\xZise\Desktop\Neuer Ordner (2)\Project1.exe"

C:\Dokumente und Einstellungen\xZise\Desktop>del "C:\Dokumente und Einstellungen
\xZise\Desktop\Neuer Ordner (2)\UNINSTALL.bat"
Die Batchdatei kann nicht gefunden werden.
Das schon irgendwie seltsam ist :?

@ DGL: 1. Deltree hab ich net als Befehl
2. k
3. Öhm... ich würde sagen wait oder so, aber ich find da nichts passended

Nils_13 19. Feb 2007 17:33

Re: Anwendungsordner löschen
 
Du musst die Pfade mit ~ aufteilen. Weiß aber auch nicht, wie man das genau macht :?

Jelly 19. Feb 2007 18:53

Re: Anwendungsordner löschen
 
Zitat:

Zitat von Nils_13
Du musst die Pfade mit ~ aufteilen. Weiß aber auch nicht, wie man das genau macht :?

Ist zwar nicht notwendig, aber so gehts:

Delphi-Quellcode:
function GetDOS83(Filename : string) : string;
var
 DirEntry : TSearchRec ;
begin
     result := '' ;
     if FindFirst (FFileName,faAnyFile,DirEntry) = 0
     then begin
               result := DirEntry.FindData.cAlternateFileName ;
               if result = ''
               then result := uppercase(extractfilename (FFilename)) ;
          end
     else Result := '' ;
     FindClose (DirEntry) ;
end;

xZise 19. Feb 2007 20:33

Re: Anwendungsordner löschen
 
Zitat:

Zitat von Jelly
Zitat:

Zitat von Nils_13
Du musst die Pfade mit ~ aufteilen. Weiß aber auch nicht, wie man das genau macht :?

Ist zwar nicht notwendig

Und woran liegt dann...
Also es kann ja nicht angehen :P Irgendwie müssen das ja die uninstaller auch gebacken kriegen ...

Jelly 19. Feb 2007 21:29

Re: Anwendungsordner löschen
 
Zitat:

Zitat von xZise
Und woran liegt dann...
Also es kann ja nicht angehen :P Irgendwie müssen das ja die uninstaller auch gebacken kriegen ...

Also entweder reden wir aneinander vorbei oder ich versteh die Aussage nicht. Ich bezog mich darauf, dass es nicht zwingend notwendig ist, kurze Dateinamen in Batch Files zu verwenden. Solange die langen Pfade in "" angegeben sind, kann der Prompt durchaus damit umgehen. Oder irre ich mich da :gruebel:

xZise 19. Feb 2007 21:51

Re: Anwendungsordner löschen
 
Das isses ja :| Ich weis nicht worans liegt...
Ich habe die "" und die Befehle sind ja an sich auch korrekt :?

himitsu 19. Feb 2007 23:21

Re: Anwendungsordner löschen
 
ich glaub hier wurde was mißverstanden.

die letzte Meldung
Zitat:

Die Batchdatei kann nicht gefunden werden.
gehört nicht zum zuletzt ausgeführten Befehl (DEL self). :warn:

Diese Meldung kommt vom der Console (CMD) und bedeutet nur daß keine weiteren Befehle ausgeführt werden können (welche theoretisch nach dem "DEL self" sein könnten), da die Datei nicht mehr existiert (sie wurde ja gelöscht).


Zu den Dateinamen (lang oder kurz):
im Normalfall reichen die langen Dateinamen, nur das diese dort bei vorhandenen Leerzeichen im Pfad/Dateinamen mit den " zusammengehalten werden müssen.
Das Leerzeichen ist schließlich ein Trennzeichen, womit der Dateiname/Pfad ja sonst in mehrere Parameter aufgesplittet würde.


Die Batchdatei zum Löschen darf natürlich auch nicht in dem zu löschendem Pfad liegen, da dieser nicht gelöscht werden kann, wenn noch was drin ist und vorallem die Batchdatei muß schließlich noch existieren (sie kann sich ja erst selber löschen, wenn auch der pfad weg ist.


Hier mal ein paar Möglichkeiten:
(Codes ohne die grauen Kommentare als C:\Temp\DelApp.bat gespeichert)
Code:
@ECHO OFF

[color=gray]EXE in einer schleife löschen,
da diese nicht gelöscht werden kann, wenn sie noch ausgeführt wird.
dies ist sozusagen das Slepp um auf die Beendigung der EXE zu warten[/color]
:Loop
DEL "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\app.exe"
IF EXIST "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\app.exe"  GOTO Loop

[color=gray]weitere Dateien löschen[/color]
DEL "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\app.ini"

[color=gray]verzeichnis löschen[/color]
RD "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)"

[color=gray]sich selber löschen[/color]
DEL "C:\Temp\DelApp.bat"
Code:
@ECHO OFF

[color=gray]Laufwerk/Verzeichnis wählen[/color]
C:
CD "\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)"

[color=gray]EXE löschen[/color]
:Loop
DEL "app.exe"
IF EXIST "app.exe"  GOTO Loop

[color=gray]weitere Dateien löschen[/color]
DEL "app.ini"

[color=gray]verzeichnis löschen[/color]
CD ..
RD "Neuer Ordner (2)"

[color=gray]sich selber löschen[/color]
DEL "C:\Temp\DelApp.bat"
Code:
@ECHO OFF

[color=gray]EXE löschen[/color]
:Loop
DEL "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\app.exe"
IF EXIST "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\app.exe"  GOTO Loop

[color=gray]Verzeichnis samt Dateien löschen[/color]
DEL "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)"

[color=gray]sich selber löschen[/color]
DEL "C:\Temp\DelApp.bat"

Zitat:

Zitat von DGL-luke
Ähm... "Wie säge ich den Ast ab, auf dem ich sitze?"

Indem man auf 'nen anderen Ast klettert. :angel:
Also die Batchdatei in das temporäre Verzeichnis und alles von dort aus.

[edit]
Befehlsanzeige in den Batch abgeschaltet ... sollte vorallem in der Schleife so besser sein ^^

Nils_13 20. Feb 2007 09:14

Re: Anwendungsordner löschen
 
[OT]
Wieso ist es eigentlich nötig in Anwendungsdaten etwas reinzuschreiben. Mir geht es schon auf die Nerven, wenn ein Ordner in Eigene Dateien angelegt wird. Außerdem ist der Ordner Anwendungsdaten der größte Ordner (abgesehen von Windows selbst), den ich auf C habe und nicht lösche kann. Wenn jetzt alle kleinen Programme auch schon dort reinschreiben, kann ich bald wohl wirklich die Partition vergrößern :roll: Ich kenne keine Sache, die man nicht ins normale Programmverzeichnis schreiben könnte!
[/OT]

Jürgen Thomas 20. Feb 2007 09:29

Re: Anwendungsordner löschen
 
Hallo,

ein Zusatzhinweis für alle Batch-Dateien: Als allererste Zeile sollte eingefügt werden:
Code:
@echo off
Eine Verwirrung, die bei xZise entstanden ist, liegt mit Sicherheit daran, dass jeder Befehl aus der Batch-Datei zunächst angezeigt wurde (und für ihn so aussah, als ob dies bereits zum Arbeitsergebnis gehören würde). Mit @echo off wird dieses Echo ausgeschaltet; der @ sorgt dafür, dass auch dieser Befehl nicht angezeigt wird. Jürgen

Luckie 20. Feb 2007 10:27

Re: Anwendungsordner löschen
 
Zitat:

Zitat von Nils_13
Ich kenne keine Sache, die man nicht ins normale Programmverzeichnis schreiben könnte![/OT]

Doch benutzerspezifische Daten zum Beispiel. Es wird sich immer beschwert, dass Windows Benutzer immer als Administratoren arbeiten, aber wenn jede Anwendung seine Daten im Programmverzeichnis ablegt, ist das auch kein Wunder, denn dort hat man nur als Administrator Schreibrechte. Besonders schön wird es dann, wenn das Programm beim Beenden versucht seine Einstellungen im Anwendungsverzeichnis zu speichern, aber mangels Schreibrechte bei mir (Ich arbeite generell nur als Benutzer mit eingeschränkten Rechten.) zu einer Exception kommt und sich das Programm nicht beendet. Dann hilft nur noch abschiessen mit dem Taskmanager. Solche Programme fliegen bei mir sofort wieder von der Platte und es wird eine nette Mail an den Hersteller geschrieben, dass er der Programmentwicklung unter Windows mindestens 10 Jahre hinterher hinkt. Schon unter Windows NT gab es eine funktionierende Benutzerverwaltung, aber mindestens seit Windows XP, sollten die Hersteller langsam gemerkt haben, wie die Benutzerverwaltung unter Windows funktioniert. Vista macht damit wohl nun endlich Schluss und verbietet es ganz ins Anwendungsverzeichnis zu schreiben.

Siehe dazu auch: http://www.michael-puff.de/Developer.../HOMEDIR.shtml

xZise 20. Feb 2007 10:51

Re: Anwendungsordner löschen
 
@ Nils: Luckie hats gesagt... Schau dir den Artikel an... Übrigens finde ich diese Lösung akzeptabel, wenn es eine passende "Deinstallationsroutine" verfügbar ist. Deshalb habe ich auch A.D.C. (hat sich in Application Manager Professional aufgelöst) entwickelt, damit man wenigstens die Daten löschen kann, wenn man vergist die "Löschroutine" aufzurufen! (Aber anscheind ist die "Anwendungsordner"-Community noch zu groß)....

@ himitsu: Ah.... Danke ^^ Das ist logisch, nur eine Frage: Habe ich immer (auch als Nutzer) schreibrechte auf C:\Temp?

PS: Mit "Anwendungsordner" meine ich den Ordner wo die Anwendung ist! Der Ordner in den Anwendungsdaten ist ja nicht das Problem!

himitsu 20. Feb 2007 11:07

Re: Anwendungsordner löschen
 
C:\Temp is nur als Beispiel gedacht :stupid:

Welchen du nun nimmst ist ja egal, es muß halt nur ein Ordner mit Schreib-/Lese-/Ausführ-/Löschrechten sein, welcher selber nicht auch noch mit gelöscht werden muß.
Und da bietet sich einer der vielen Tempordner nunmal an. :angel:

Außerdem weiß ich doch nicht, wo der ich bei dir befindet ... noch bin ich kein allmächtiger Hellseher. :angel:

C:\Dokumente und Einstellungen\Baerbel\Lokale Einstellungen\Temp
C:\WINDOWS\Temp (jupp, der alte Tempordner existiert och noch)
...

Am Besten du ließt dir den aktuellen Tempordner aus.

xZise 20. Feb 2007 11:09

Re: Anwendungsordner löschen
 
Zitat:

Zitat von himitsu
C:\Dokumente und Einstellungen\Baerbel\Lokale Einstellungen\Temp

Der klingt gut :P (So Benutzterspezifiziert ^^)

@ C:\Windows: ich glaube nicht das ein armer Benutzter darauf Schreibrechte hat... Aber gibts da nicht sio ein Programm,womit ich das testen kann?

[edit]Also das ist irgendwie seltsam:
Sie sieht die bat aus (Ordner sollte nicht gelöscht werden):
Zitat:

@echo off
:loop
del "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\ApplicationManagerProf.exe"
if exists "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\ApplicationManagerProf.exe" GOTO loop
del "C:\Dokumente und Einstellungen\xZise\UNINSTALL.bat"
Aber: 1. Sieht man kurz das CMD-Fenster
2. Meckert er wieder rum ...
Zitat:

C:\Dokumente und Einstellungen\xZise>"C:\Dokumente und Einstellungen\xZise\UNINS
TALL.bat"
C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\ApplicationManager
Prof.exe konnte nicht gefunden werden
""C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\ApplicationManag
erProf.exe"" ist syntaktisch an dieser Stelle nicht verarbeitbar.
PS: Mithilfe von Luckies-Methode habe ich noch nicht den Temp-Ordner ausfindigmachen können, aber so sollte es auch gehen ;)[/edit]

[edit][quote="himitsu"]ich glaub hier wurde was mißverstanden.

die letzte Meldung
Zitat:

Code:
@ECHO OFF

[color=gray]EXE löschen[/color]
:Loop
DEL "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\app.exe"
IF EXIST "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)\app.exe"  GOTO Loop

[color=gray]Verzeichnis samt Dateien löschen[/color]
DEL "C:\Dokumente und Einstellungen\xZise\Desktop\Neuer Ordner (2)"

[color=gray]sich selber löschen[/color]
DEL "C:\Temp\DelApp.bat"

Also "del" löscht nur die Dateien in einen Ordner! rd müsste in jedem falle ausgeführt werden![/edit]

xZise 21. Feb 2007 20:07

Re: Anwendungsordner löschen
 
Ich wüsste gerne, woran es liegt, dass die Batch nicht funktioniert?

xZise 24. Feb 2007 17:07

Re: Anwendungsordner löschen
 
Ich bin ein bisschen am Verzeifeln :|

Christian Seehase 24. Feb 2007 17:17

Re: Anwendungsordner löschen
 
Moin Fabian,

wenn Du Dir mal genau die Hilfe zu IF anschaust (help if im Konsolenfenster), wirst Du feststellen, dass es nicht

IF EXISTS

sondern

IF EXIST

heisst, also ohne S am Ende.

Damit sich eine Batch-Datei selber löscht kann man übrigens sehr schön

Del %0

verwenden (%0 entspricht ParamStr(0) in Delphi)

xZise 24. Feb 2007 17:20

Re: Anwendungsordner löschen
 
Oh no :pale:
Peinlich, peinlich :|

Danke Chris ^^

Wegen dem "%0": Danke ;) Aber ich glaube es muss in Anführungszeichen oder? Weil in der Registry muss es z.B. auch so, wenn man Dateiendungen linkt...

Christian Seehase 24. Feb 2007 17:37

Re: Anwendungsordner löschen
 
Moin Fabian

Zitat:

Zitat von xZise
Aber ich glaube es muss in Anführungszeichen oder?

Es darf nicht in "" eingeschlossen werden, da der Wert immer in "" eingeschlossen zurückgegeben wird, auch wenn der eigentliche Pfad keine Leerzeichen enthält.

Sunlight7 25. Feb 2007 03:53

Re: Anwendungsordner löschen
 
Moin!

Um auch sicher Schreibrechte auf den Temp Ordner zu haben empfiehlt sich MSDN-Library durchsuchenGetTempPath, damit speicherst Du in Temp Dir von Windows, sollte mal was daneben gehen und Dateien darin über bleiben kann der User sie mit der Datenträgerbereinigung löschen ;)

xZise 25. Feb 2007 10:58

Re: Anwendungsordner löschen
 
Naja ^^ Auf %Username%\ sollte man auch immer Zugriffsrechte haben :)

Guido Eisenbeis 8. Mär 2007 06:44

Re: Anwendungsordner löschen
 
Ein Beispiel für die oben genannte Batch-Dateien-Lösung findet sich hier.
Eine andere interessante Möglichkeit findet sich hier.

Gruß,
Guido.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz