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.