How to configure Inno Setup to uninstall everything?

后端 未结 9 1235
渐次进展
渐次进展 2020-12-13 14:33

I am new to Inno Setup. Stuck on one issue ~ how to configure the uninstall piece to remove all files, folders, subfolders, and even new files/folders etc. created by applic

9条回答
  •  半阙折子戏
    2020-12-13 15:15

    You should probably have made this a totally new question, but I'll answer your updated question here as well. Have a look at the section "Pascal Scripting: Uninstall Code" in the Inno Setup Documentation.

    To give an example how to conditionally delete data files as part of the uninstallation process:

    [Code]
    
    procedure DeleteBitmaps(ADirName: string);
    var
      FindRec: TFindRec;
    begin
      if FindFirst(ADirName + '\*.*', FindRec) then begin
        try
          repeat
            if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then begin
              if (FindRec.Name <> '.') and (FindRec.Name <> '..') then begin
                DeleteBitmaps(ADirName + '\' + FindRec.Name);
                RemoveDir(ADirName + '\' + FindRec.Name);
              end;
            end else if Pos('.bmp', AnsiLowerCase(FindRec.Name)) > 0 then
              DeleteFile(ADirName + '\' + FindRec.Name);
          until not FindNext(FindRec);
        finally
          FindClose(FindRec);
        end;
      end;
    end;
    
    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    begin
      if CurUninstallStep = usUninstall then begin
        if MsgBox('Do you want to delete all data files?', mbConfirmation,
            MB_YESNO) = IDYES 
        then begin
          DeleteBitmaps(ExpandConstant('{app}'));
        end;
      end;
    end;
    

    But depending on the amount of stuff you need to clean up you might be better off to create a special helper program that is part of the installation, and which can be executed during the uninstallation of the app (using an entry in the [UninstallRun] section).

提交回复
热议问题