Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eigenes Programm beenden und löschen / Uninstall (https://www.delphipraxis.net/55810-eigenes-programm-beenden-und-loeschen-uninstall.html)

Jasmine 27. Okt 2005 10:47


Eigenes Programm beenden und löschen / Uninstall
 
Hallo Liebe Delphi Freunde,

ich habe mal wieder ein Problemchen und würde mich über
Eure Hilfe und Ideen sehr freuen.

Ich schreibe an meiner Uninstall Routine, welche Verknüpfungen und sonstige,
programmspezifische Dateien wieder vom System löscht.

Nun, am Ende, muss ich mich (mein Programm) ja auch selber löschen und den erstellten Order
wieder entfernen.

Wie kann ich mich denn nun selber löschen, während das Programm noch arbeitet ?
Der Zugriff auf die Datei (meine .exe) bleibt mir ja verwehrt, solange das Programm läuft.

Dankeeeee für eure kreativen Ideen im Voraus.

:cat:

Jasmine

MarcoWarm 27. Okt 2005 13:20

Re: Eigenes Programm beenden und löschen / Uninstall
 
Hi...

also ich hab nur 2 Minuten drüber nachgedacht (nicht, daß jemand hier die Profilösung erwartet ;) )

also beim Uninstall erstellst du eine Batchdatei (z.B. Clearfiles.bat) :

Code:
del %DeinProgPfad%\DeinProg.exe
del Clearfiles.bat
darin löschst du dein Programm und deine Batch

diese Batch trägst du dann in der Registry unter:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\RunOnce

ein. Und nach dem Neustart ist dein Programm verschwunden.

himitsu 27. Okt 2005 15:35

Re: Eigenes Programm beenden und löschen / Uninstall
 
RunOnce ... wozu erst beim nächsten Neustart?

Beiträge wie diesen http://www.delphipraxis.net/internal...light=del+goto gibt es viele in der DP.

In diesem Beispiel soll jetzt zwar ein Programm durch 'ne neue Version ersetzt werden - alte Datei (also sich selber) löschen und die neue Datei an die eigene Stelle setzen.
Aber es ist ja kein Problem die Scripte dahingehen abzuändern, daß die Datei nur noch gelöscht wird :zwinker:

Chegga 27. Okt 2005 15:48

Re: Eigenes Programm beenden und löschen / Uninstall
 
Hi,

Zitat:

Zitat von Jasmine
Ich schreibe an meiner Uninstall Routine, welche Verknüpfungen und sonstige,
programmspezifische Dateien wieder vom System löscht.

Willst/musst du diese Uninstall Routine selber schreiben?
Wenn du nur nach einer Lösung suchst: Hier im Forum suchenInno Setup :wink:


MfG Marc

turboPASCAL 27. Okt 2005 16:14

Re: Eigenes Programm beenden und löschen / Uninstall
 
...das eigene Programm nach dem Beenden löschen?:
http://www.swissdelphicenter.ch/de/showcode.php?id=123

ichbins 27. Okt 2005 16:48

Re: Eigenes Programm beenden und löschen / Uninstall
 
gibt's da keine "batchfreie" Lösung? Alle Uninstaller machen das ohne Batch...

Ich hab mir schon mal gedacht dass sich der Uninstaller selbst in ein temporäres Verzeichniss (Papierkorb möglich?) kopiert, und diese Kopie mit dem exename als Parameter startet. Dann beendet es sich.

Beim Starten überprüft es, ob es einen Parameter hat (exename), wenn ja, Datei löschen, wenn nein, Normaler Start (Meldungen zeigen wie "wollen sie das Programm wirklich entfernen?")

moritz 27. Okt 2005 17:33

Re: Eigenes Programm beenden und löschen / Uninstall
 
Das Problem ist, dass sich eine EXE-Datei nicht selber löschen kann, im Gegenteil zu einer Batch-Datei. InnoSetup wird das vermutlich auch mit Batchdateien machen, da bleibt ja auch nix übrig.

Nachtrag: Es gibt auch irgendeinen Befehl, um eine Datei beim nächsten Neustart (Also während des Startvorgangs) von Windows löschen zu lassen.

NicoDE 27. Okt 2005 17:38

Re: Eigenes Programm beenden und löschen / Uninstall
 
Zitat:

Zitat von ichbins
gibt's da keine "batchfreie" Lösung?

Jupp, zum Beispiel mit einer DLL, welche per RunDll32 aufgerufen wird (DLLs können sich auch unter Windows NT selbst löschen, da der Kernel nur ein Handle für das Image hält mit dem der Prozeß erzeugt wurde). Das hat insbesondere den Vorteil, dass man eine Fehlerbehandlung in der DLL integrieren kann (wobei, wer braucht das schon ;))...

ichbins 27. Okt 2005 17:39

Re: Eigenes Programm beenden und löschen / Uninstall
 
man könnte auch einen run-once-Eintrag in die Registry erstellen, der das da aufruft:
Delphi-Quellcode:
%comspec% /c erase < Name der Anwendung >
zur DLL-Lösung:

Die DLL würde das ganze Setup noch'n ganzes Stück größer machen... Gar nich gut für'n Setup.

ganz nebenbei hab ich einmal versucht was mitner DLL zu machen, an dem Tag kamem mindestens 10^12 Delphi-Fehlermeldungen :mrgreen:... Seitdem hab ich das Thema nich mehr aufgegriffen

NicoDE 27. Okt 2005 17:41

Re: Eigenes Programm beenden und löschen / Uninstall
 
Zitat:

Zitat von ichbins
man könnte auch einen run-once-Eintrag in die Registry erstellen, der das da aufruft:
Delphi-Quellcode:
%comspec% /c erase < Name der Anwendung >

Dafür gibt's eigentlich MSDN-Library durchsuchenMoveFileEx (für Win9x, siehe Kommentare in MSDN).
(Grund: Kompatibilität zu Programmen, welche die beim Neustart zu löschenden Dateien anzeigen)

ichbins 27. Okt 2005 17:45

Re: Eigenes Programm beenden und löschen / Uninstall
 
kann ich dammit auch die EXE moven?

NicoDE 27. Okt 2005 17:49

Re: Eigenes Programm beenden und löschen / Uninstall
 
Zitat:

Zitat von ichbins
kann ich dammit auch die EXE moven?

Nicht nur 'moven', sondern auch (in dem Falle beim Systemstart) löschen lassen...

ichbins 27. Okt 2005 17:52

Re: Eigenes Programm beenden und löschen / Uninstall
 
wiedas?
indem ich die EXE in den Namen '' move?

NicoDE 27. Okt 2005 17:53

Re: Eigenes Programm beenden und löschen / Uninstall
 
Zitat:

Zitat von ichbins
indem ich die EXE in den Namen '' move?

nil

ichbins 27. Okt 2005 18:00

Re: Eigenes Programm beenden und löschen / Uninstall
 
thanks :thumb:

Probelmatisch ist nur noch das mit den Admin-Rechten. Aber 'n "normaler" User sollte ja sowieso nicht Programme runterschmeissen dürfen

NicoDE 27. Okt 2005 18:04

Re: Eigenes Programm beenden und löschen / Uninstall
 
Zitat:

Zitat von ichbins
Probelmatisch ist nur noch das mit den Admin-Rechten. Aber 'n "normaler" User sollte ja sowieso nicht Programme runterschmeissen dürfen

Am kompatiblesten ist (meiner bescheidenen Meinung nach) die DLL-Lösung - allerdings sind dir 1-4 KB für eine DLL im Installer zuviel...

ichbins 27. Okt 2005 18:18

Re: Eigenes Programm beenden und löschen / Uninstall
 
naja, ich hab noch keine DLL kompilieren können, die kleiner als 60 KB ist... vielleicht bin ich auch einfach nur zu doof :mrgreen:

kannst du mir mal so ne DLL geben und am besten noch den Code wie ich die einbind?

NicoDE 27. Okt 2005 18:20

Re: Eigenes Programm beenden und löschen / Uninstall
 
Zitat:

Zitat von ichbins
kannst du mir mal so ne DLL geben und am besten noch den Code wie ich die einbind?

Sicher, aber genauso sicher nicht heute abend, da ruft erstmal der Feierabend :)

ichbins 27. Okt 2005 18:23

Re: Eigenes Programm beenden und löschen / Uninstall
 
schaaaade. :mrgreen: Dann probier ichs mal selber

==> :wall: :wall: :wall: :wall:

:coder2:

wie heisst denn der "Schlüsselbefehl" ?

NicoDE 27. Okt 2005 18:40

Re: Eigenes Programm beenden und löschen / Uninstall
 
Zitat:

Zitat von ichbins
wie heisst denn der "Schlüsselbefehl" ?

Kurzer Überblick:

Du schreibst eine DLL die eine Funktion exportiert die mit RunDll32 kompatibel ist - zum Beispiel:
Delphi-Quellcode:
library MyUnInst;

uses
  Windows;

procedure DeleteSelf;
begin
  //TODO: DeleteSelf
end;

procedure MyDeleteFile(Wnd: HWND; Inst: HINST; Cmd: LPSTR; Show: Integer); stdcall;
begin
  //MessageBoxA(Wnd, Cmd, 'MyDeleteFile', MB_OK or MB_ICONINFORMATION);
  //TODO: Cmd auswerten und Aktionen ausfuehren...
  DeleteSelf();
end;

exports
  MyDeleteFile;

begin
end.
Und startest aus deinem Programm "rundll32.exe myuninst.dll,MyDeleteFile Hello, World!"

Jasmine 28. Okt 2005 14:21

Re: Eigenes Programm beenden und löschen / Uninstall
 
Ui,

soviele Antworten und Ideen, super Jungs :thumb:
Vielen Dank.

Ich habe mich für die Idee mit dem Batchfile entschieden, klappt alles
soweit gut. Hatte zwar noch Probleme, das Unterverzeichnis meines Programmes,
welches ich im Programm Ordner erstellt habe, wieder zu löschen, aber nun klappts
auch damit. (REMDIR)

Klappt das mit dem Batch File denn auch unter allen Windows Versionen ab Win98SE
aufwärts ?

Klar, ich hätte fertige Tools nehmen können, wie InstallShield oder InnoSetup, jedoch
bevorzuge ich (fast)immer alles selber zu programmieren, nur so lernt man(Frau) dazu.

Also die Install und Uninstall Routine befindet sich in meinem Hauptprogramm, deshalb
musste ich auch mein Programm am Ende selber löschen. Um in die Uninstall Routine zu
kommen, gibt es einen Menüpunkt mit Sicherheitsabfrage. Wenn gewünscht, erfolgt
dann die Uninstall Funktion, mit Batchfile Erstellung, usw.

Nun wäre es aber schön, wenn ich im Programmenü
(Start->Programme->MeinProgrammName->MeinProgrammName.exe)

zusätzlich zum eigenen Programm auch einen uninstall.exe Eintrag dazu setzen könnte,
der natürlich immer auf meine .exe zeigt, jedoch mit -un, also MeinProgrammName.exe -un
und ich bei Programmstart dann erkenne, ob entweder der normale Programmaufruf oder mit
-un erfolgt ist, so dass ich die Uninstall Funktionen direkt starten kann.

Ich habe das schonmal mit dem Linkeintrag ausprobiert, jedoch, sobald ich den Programmnamen
inkl. Pfad mit .exe -un setzte, wird das nicht mehr als eine Exe Datei verstanden und nach
dem Programm gesucht.

Seit Ihr so lieb mir ein paar Ratschläge zu geben.
Danke.

Jasmine

:kiss:

MathiasSimmack 28. Okt 2005 14:50

Re: Eigenes Programm beenden und löschen / Uninstall
 
Zitat:

Zitat von Jasmine
Klar, ich hätte fertige Tools nehmen können, wie InstallShield oder InnoSetup, jedoch bevorzuge ich (fast)immer alles selber zu programmieren, nur so lernt man(Frau) dazu.

Wobei ich in dem Fall aber nicht unbedingt das Rad ein zweites Mal erfinden wollen würde. Vom Lerneffekt mag das stimmen, was du schreibst. Aber vom Komfort her bevorzuge ich eine fertige Lösung à la MSI, Inno Setup oder NSIS.


Zitat:

Ich habe das schonmal mit dem Linkeintrag ausprobiert, jedoch, sobald ich den Programmnamen
inkl. Pfad mit .exe -un setzte, wird das nicht mehr als eine Exe Datei verstanden und nach
dem Programm gesucht.
Wie erstellst du denn den Link? Mit dem IShell*-Interface, an das ich gerade denke? Wenn Ja, dann gibt es dort eine eigene Eigenschaft für Kommandozeilenparameter. Nennt sich [dp="IShellLink SetArguments"]SetArguments[/dp].

himitsu 28. Okt 2005 15:17

Re: Eigenes Programm beenden und löschen / Uninstall
 
Das mit den Batchdateien funktioniert sogar bis runter zum DOS, also bei Win 3.1 und so wird es auch keine Probleme geben ^^


Es gibt nur eine Einschränkung ... seit WinNT haben die Batch-/Command-Dateien eigentlich eine neue Endung (unter Windows) > .CMD , aber da die .BAT wennoch weiterhin funktionieren sollte es keine Probleme geben, wenn du eben immer nur .BAT verwendest ... mal sehn ab wann M$ die .BAT in ihrem Windows nicht mehr standartmäßig unterstützen werden :gruebel:

Jasmine 28. Okt 2005 17:58

Re: Eigenes Programm beenden und löschen / Uninstall
 
Hallo Matthias,

danke, war ja sooo einfach :) Habe allerdings ILinkShellA verwendet, damit die Link Einträge
auch unter < Win2K funktionieren.

@alle

Soweit alles ok, habe auch unterschiedliche icons drin, für die beiden Aufrufe.

Jedoch gibt es noch auf kleines Problemchen.

Ich will ja auch einen Link in die Quick Launch Bar setzen, habe dafür:
QUICK_LAUNCH_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\GrpConv ';

und hole mit den RegEintrag aus:
Reg := TRegIniFile.Create(QUICK_LAUNCH_ROOT);
Directory := Reg.ReadString('MapGroups', 'Quick Launch', '');

Jedoch ist das wohl das falsche Verzeichnis in der Registry.

Ich habe zwar versucht mit IShellFolderBand durchzuschauen, aber komme leider
nicht mir klar.

Kennt jemand den richtigen Pfad ??? ..oder einen besseren Weg ?

Danke.

Jasmine

:cat:

icqgoofy 4. Jan 2006 17:44

Re: Eigenes Programm beenden und löschen / Uninstall
 
Hallo,

ich habe (fast) dasselbe Problem wie Jasmine.
Ich möchte mein Programm per ButtonClick, der das letzte Fenster schließt
meine Anwendung löschen.

Ich habe es hiermit probiert:
http://www.swissdelphicenter.ch/de/showcode.php?id=123

aber irgendwie funktioniert es nicht wirklich.

Kann mir da jemand helfen?

Gruß icqgoofy

SirThornberry 4. Jan 2006 23:19

Re: Eigenes Programm beenden und löschen / Uninstall
 
unter NT-Systemen kann man eine Programm aus dem Speicher ausführen. Du könntest also dein UnInstall aus einer Ressource laden und ausführen (ohne es auf die Festplatte zu schreiben) und das Uinstall kann dann warten bis das eigentlich Programm beendet ist und dann dieses löschen.

icqgoofy 7. Jan 2006 17:15

Re: Eigenes Programm beenden und löschen / Uninstall
 
Und wie sollte das dann so ungefähr aussehen?

Gruß icqgoofy

NicoDE 9. Jan 2006 10:16

Re: Eigenes Programm beenden und löschen / Uninstall
 
Zitat:

Zitat von icqgoofy
Und wie sollte das dann so ungefähr aussehen?

Etwa so: http://www.michael-puff.de/Developer...o/inmemexe.zip
...allerdings würde ich nicht dazu raten, diese Methode für Produktionssysteme zu verwenden...


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 Uhr.

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