Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   InnoSetup: User fragen, ob Datei deinstalliert werden soll (https://www.delphipraxis.net/37894-innosetup-user-fragen-ob-datei-deinstalliert-werden-soll.html)

schitho 11. Jan 2005 21:50


InnoSetup: User fragen, ob Datei deinstalliert werden soll
 
Hi,

ich verwende InnoSetup zur Installation hab dazu folgende Frage bzw Problem:

Mein Programm speichert Programmeinstellungen in einer ini-Datei.

Nun möchte ich beim Deinstallieren den User fragen, ob er diese Datei behalten bzw. löschen möchte. Dabei bin ich so vorgegangen:

[code=pre][UninstallDelete]
Type: filesandordirs; Name: {userappdata}\MeinProgram\; Check: FragMich

Code:
function FragMich: boolean;
begin
 Result := (MsgBox('Soll die Datei gelöscht werden?', mbConfirmation,MB_YESNO) = IDYES);
end;
Das Problem: Die Frage wird bei der Installation und nicht bei der Deinstallation aufgerufen.

Wie geht es richtig?

Gruß
Thomas

[edit=sakura] CODE-Tags. Mfg, sakura[/edit]

MathiasSimmack 11. Jan 2005 22:04

Re: InnoSetup: User fragen, ob Datei deinstalliert werden so
 
Ich habe schon im DF gelesen, dass es nicht funktioniert. Wundert mich aber, da eben "UninstallRun" nur bei der Deinstallation aufgerufen werden soll(te). Zumindest dachte ich das bisher. Evtl. ist das auch ein kleines Problem mit "UninstallRun". Ich werde nebenbei noch mal in die Hilfe gucken und schauen was dort gesagt wird.

Wende dich doch notfalls mal an das deutsche Inno Setup-Forum. Evtl. haben die Jungs einen Tipp für dich, da sie sich ja nur IS verschrieben haben. Außerdem will schätzungsweise auch ihr Board mit Fragen gefüllt werden. :)


Edit: Ah, ich sehe schon. Du hast die Frage schon dort gestellt. Sorry. :oops:

MathiasSimmack 14. Jan 2005 10:18

Re: InnoSetup: User fragen, ob Datei deinstalliert werden so
 
Wie versprochen habe ich mir das noch mal angeguckt und eine Lösung gefunden. Dass "[UninstallDelete]" schon bei der Installation aufgerufen wird, ist kein Wunder und auch kein Fehler. Vllt. weißt du ja, dass Inno Setup für jede Datei und jeden Registryeintrag usw. die LOG-Datei ergänzt, damit der Uninstaller später auch weiß, was er entfernen soll. Da der Uninstaller ja aber nicht wissen kann, ob dein Programm später noch selbst Dateien anlegt, gibst du deren Namen üblicherweise in der Sektion "[UninstallDelete]" an. Während der Installation werden diese Namen dann auch bloß in die LOG-Datei geschrieben, damit der Uninstaller später Bescheid weiß.

Aber es muss ja nun unbedingt eine Abfrage sein, ;), also brauchst du eine der neuen Uninstaller-Ereignisfunktionen:
[code=pre]
Code:
procedure CurUninstallStepChanged(CUS: TUninstallStep);
var
  S : string;
begin
  if(CUS = usUninstall) then
  begin
    S := ExpandConstant('{app}\test.ini');

    if(fileexists(S)) and
      (MsgBox('Wollen Sie die Datei "' + S + '" entfernen?',mbConfirmation,MB_YESNO) = IDYES) then
    begin
      DeleteFile(S);
    end;
  end;
end;
Ich behaupte jetzt einfach mal, dass es die erst ab Inno Setup 5 gibt. :) Ich gehe aber davon aus, dass du ohnehin immer die aktuellste Version benutzt.

Einziger Schwachpunkt: Es funktioniert nicht mit mehrsprachigen Setups, weil man im Inno Setup-Deinstaller nicht auf die "[CustomMessages]"-Sektion zugreifen kann. Als Lösung würde mir höchstens einfallen, den passenden Sprachstring bei der Installation in die Registry zu schreiben und dann bei der Abfrage darauf zuzugreifen.

schitho 19. Jan 2005 19:59

Re: InnoSetup: User fragen, ob Datei deinstalliert werden so
 
Hab noch eine Frage dazu:

Bei meinem Script kann der User in den Komponenten wählen, ob er das Programm für alle User oder nur für den aktuelle User installieren möchte.

Wenn der User "Alle User" ausgewählt hat, dann starte ich ein selbstgeschriebenes Programm, welches für die Deinstallation alle INI-Dateien sorgt.

Wenn der User "Nur aktuellen User" ausgewählt hat, dann soll die von Dir erstellte Procedure aufgerufen werden.

Wie kann ich nun steuern, dass je nach Einstellung mein Programm oder deien Prozedure aufgerufen wird?

Gruß
Thomas

MathiasSimmack 19. Jan 2005 20:33

Re: InnoSetup: User fragen, ob Datei deinstalliert werden so
 
Leg doch einen Eintrag in der Registry ab, den du beim Start des Deinstallers abfragst. Müsste doch neuerdings mit Inno Setup 5 gehen.

CodeX 20. Jun 2005 20:31

Re: InnoSetup: User fragen, ob Datei deinstalliert werden so
 
ich habe das selbe problem.
der user soll beim installieren wählen, ob eine datei gelöscht werden soll oder nicht.
das mit der sprache ist halb so wild. (wenn es aber doch mittlerweile gehen sollte, bitte melden)

jedenfalls habe ich das mal mit dem geposteten code versucht.
es fragt zwar ab, aber die datei wird so oder so gelöscht. also habe ich bei der datei den flag "uninsneveruninstall" gesetzt
Source: datei.ini; DestDir: {app}; Flags: uninsneveruninstall;
damit wirklich das script entscheidet, ob die datei gelöscht wird oder nicht. so klappt das ganze.

jedoch bleibt dann ein lehrer ordner übrig. den müsste man dann auch per code gleich mitlöschen.
gibt es dafür einen befehl?

MathiasSimmack 21. Jun 2005 18:17

Re: InnoSetup: User fragen, ob Datei deinstalliert werden so
 
Zitat:

Zitat von CodeX
ich habe das selbe problem.

Nein, hast du nicht. :lol: Das Problem des Beitragserstellers ist, dass sein Programm erst zur Laufzeit eine INI-Datei erzeugt. Dein Skript kopiert die INI aber schon zur Installation. Damit landet sie im LOG des Uninstallers und wird natürlich deinstalliert. Die Abfrage spielt also insofern wirklich keine Rolle. Wenn du Ja sagst, wird die Datei eben bloß eher gelöscht.

Zitat:

das mit der sprache ist halb so wild. (wenn es aber doch mittlerweile gehen sollte, bitte melden)
Geht noch nicht. Ist als #705 noch offen.

Zitat:

jedoch bleibt dann ein lehrer ordner übrig. den müsste man dann auch per code gleich mitlöschen.
gibt es dafür einen befehl?
Dafür gibt´s [UninstallDelete]. Beachte den Warnhinweis in der Hilfedatei und benutze es wirklich nur um bestimmte leere Ordner bzw. bestimmte Dateien zu löschen.

CodeX 21. Jun 2005 18:51

Re: InnoSetup: User fragen, ob Datei deinstalliert werden so
 
Zitat:

Zitat von MathiasSimmack
..., dass sein Programm erst zur Laufzeit eine INI-Datei erzeugt. Dein Skript kopiert die INI aber schon zur Installation.

ok, stimmt. habe ich übersehen.
Zitat:

Dafür gibt´s [UninstallDelete]. Beachte den Warnhinweis in der Hilfedatei und benutze es wirklich nur um bestimmte leere Ordner bzw. bestimmte Dateien zu löschen.
habe das jetzt zusätzlich zu dem, was ich oben geschrieben habe, noch folgendes gemacht:
[UninstallDelete]
Type: dirifempty; Name: {app}

jetzt gehts :)

dann also nur noch auf lösung 705 warten, dann ist alles perfekt ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 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