Hallo zusammen,
Mein erster Thread wurde leider geschlossen, aus Befürchtungen dass ich damit "Schlimmes" anstellen könnte.
Hier noch zuerst kurz ein paar Erklärungen, für was ich das genau brauche (ich wurde gebeten, dies mitzuteilen)
Ich arbeite an einer Software, wobei die ausführbare Datei gleichzeitig auch Installer- und Deinstaller ist. Dies aus Einfachheitsgründen, der User lädt nur eine Datei herunter und hat das gesamte Paket. Um das Programm zu Deinstallieren, klickt man über das Startmenü auf die Verknüpfung "Uninstall", welche dann die Exe mit einer Attribute aufruft und das Programm und die Verknüpfungen entfernt. Hier haperts aber noch etwas, siehe nachfolgend:
Die soeben aufgerufene Exe-Datei lässt sich einfach über folgenden Code löschen, indem zuerst eine Konsole aufgerufen wird und diese dann zeitlich verzögert - hier 3 Sekunden - die Datei löscht (zum Zeitpunkt, wo sich das Programm selbst wieder geschlossen hat mit dem Befehl "END")
Ich kann auch alle anderen Dateien und Unterverzeichnisse des Programmordners mittels nachfolgendem Code löschen:
Dieser soeben beschriebene Code sollte jedoch auch das (danach) leere Verzeichnis löschen, tut es aber nicht. Dies gilt übrigens auch für das Startmenü-Verzeichnis, von wo aus man die Exe über die Verknüpfung aufgerufen hat. Man kann im Startmenü-Verzeichnis die Verknüpfungen entfernen, den leeren Ordner jedoch nicht.
Es scheint, dass es trotz der Schliessung/Beendigung des Programms immer noch einen Hintergrundprozess offen hat, welches den Zugriff (das Löschen des leeren Ordners) verhindert. Ich könnte dies einfach so sein lassen, doch der Benutzer sieht dann den noch leeren Ordner im Startmenü und im Programmpfad und das ist unschön.
Ich habe auch versucht, eine Batch Datei anstelle des CMD commands zu erstellen und dann aufzurufen. Sogar das Aufrufen einer solchen Batch-Datei und dann ein Aufrufen wieder einer Batch-Datei von der ersten Batch Datei aus hat nicht geholfen! Es geht natürlich, wenn die EXE geschlossen ist und die Batch Datei separat geöffnet wird (nicht über den Programmcode). Hat jemand einen Vorschlag, wie das (danach leere) Programmverzeichnis gelöscht werden könnte ohne dass man eine zweite EXE Datei hat, welche sich an einem anderen Ort befindet? Gibt es vielleicht einen speziellen END Befehl, welcher alle Ressourcen löscht und so auch den Zugriff auf das Verzeichnis selbst ermöglicht? Ich habe es auch mit Application.exit versucht aber dies half nicht.
Danke für eure Antworten
Mein erster Thread wurde leider geschlossen, aus Befürchtungen dass ich damit "Schlimmes" anstellen könnte.
Hier noch zuerst kurz ein paar Erklärungen, für was ich das genau brauche (ich wurde gebeten, dies mitzuteilen)
Ich arbeite an einer Software, wobei die ausführbare Datei gleichzeitig auch Installer- und Deinstaller ist. Dies aus Einfachheitsgründen, der User lädt nur eine Datei herunter und hat das gesamte Paket. Um das Programm zu Deinstallieren, klickt man über das Startmenü auf die Verknüpfung "Uninstall", welche dann die Exe mit einer Attribute aufruft und das Programm und die Verknüpfungen entfernt. Hier haperts aber noch etwas, siehe nachfolgend:
Die soeben aufgerufene Exe-Datei lässt sich einfach über folgenden Code löschen, indem zuerst eine Konsole aufgerufen wird und diese dann zeitlich verzögert - hier 3 Sekunden - die Datei löscht (zum Zeitpunkt, wo sich das Programm selbst wieder geschlossen hat mit dem Befehl "END")
Ich kann auch alle anderen Dateien und Unterverzeichnisse des Programmordners mittels nachfolgendem Code löschen:
Dieser soeben beschriebene Code sollte jedoch auch das (danach) leere Verzeichnis löschen, tut es aber nicht. Dies gilt übrigens auch für das Startmenü-Verzeichnis, von wo aus man die Exe über die Verknüpfung aufgerufen hat. Man kann im Startmenü-Verzeichnis die Verknüpfungen entfernen, den leeren Ordner jedoch nicht.
Es scheint, dass es trotz der Schliessung/Beendigung des Programms immer noch einen Hintergrundprozess offen hat, welches den Zugriff (das Löschen des leeren Ordners) verhindert. Ich könnte dies einfach so sein lassen, doch der Benutzer sieht dann den noch leeren Ordner im Startmenü und im Programmpfad und das ist unschön.
Ich habe auch versucht, eine Batch Datei anstelle des CMD commands zu erstellen und dann aufzurufen. Sogar das Aufrufen einer solchen Batch-Datei und dann ein Aufrufen wieder einer Batch-Datei von der ersten Batch Datei aus hat nicht geholfen! Es geht natürlich, wenn die EXE geschlossen ist und die Batch Datei separat geöffnet wird (nicht über den Programmcode). Hat jemand einen Vorschlag, wie das (danach leere) Programmverzeichnis gelöscht werden könnte ohne dass man eine zweite EXE Datei hat, welche sich an einem anderen Ort befindet? Gibt es vielleicht einen speziellen END Befehl, welcher alle Ressourcen löscht und so auch den Zugriff auf das Verzeichnis selbst ermöglicht? Ich habe es auch mit Application.exit versucht aber dies half nicht.
Danke für eure Antworten