Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Inno Setup - {userappdata} aller User des Systems ermitteln (https://www.delphipraxis.net/51509-inno-setup-%7Buserappdata%7D-aller-user-des-systems-ermitteln.html)

FriFra 13. Aug 2005 22:30


Inno Setup - {userappdata} aller User des Systems ermitteln
 
Ich schreibe in meinem Setup eine default-ini in den {commonappdata}. Mein Programm schreibt nun die Daten jedes Users in dessen eigenes appdata Verzeichnis...
Wenn nun deinstalliert wird, sollen natürlich die {userappdata} Ordner aller User des Systems bereinigt werden und nicht nur der Ordner des gerade angemeldeten Users :gruebel:

MathiasSimmack 13. Aug 2005 22:48

Re: Inno Setup - {userappdata} aller User des Systems ermitt
 
Geht nicht. Oder sagen wir: Es ist nicht einfach. Schreib der Einfachheit halber ein Cleaningtool, das nur die Einstellungen des angemeldeten Users entfernt, und das man kostenlos bekommen kann (Homepage, CD deines Programms, Bonus im Download, usw.)

FriFra 13. Aug 2005 22:54

Re: Inno Setup - {userappdata} aller User des Systems ermitt
 
Zitat:

Zitat von MathiasSimmack
Geht nicht.

Hm... das höre ich nicht gerne...
Man kann doch in Innosetup nach der Deinstallation noch pascal-Code ausführen...
Wenn ich nun eine Liste aller Benutzernamen am System hätte, könnte ich aus dem {userappdata}-string einfach "\[Username]\" gegen "\[anderer Username]\" ersetzen und dort die entspr. Ordner/Dateien suchen und ggf. löschen.
Die Frage ist nun, wo bekomme ich eine Liste mir allen Usernamen?

MathiasSimmack 14. Aug 2005 08:27

Re: Inno Setup - {userappdata} aller User des Systems ermitt
 
Dann brauchst du auf jeden Fall ein externes Programm, denn die Skriptsprache von Inno Setup unterstützt das überhaupt nicht. Wie gesagt, es wird auf ein Cleaningtool hinauslaufen. Ich habe mal so was für Luckies LuckieDIPS gemacht. Das Teil hat den Profilordner des aktuell gemeldeten Benutzers ermittelt und ist dann nur eine Ebene höher gesprungen. Von da hat es sich rekursiv durch die Verzeichnisse gewühlt und Luckies INI-Datei (gehörte zu seinem LuckieDIPS) gelöscht.
Alternative, wie du schon sagtest: alle Hier im Forum suchenBenutzer auflisten und ggf. versuchen, dabei gleich deren Profil- o.ä. Ordner zu erhalten.


Wichtig wäre, dass sich dein Deinstaller dann auch nur mit Admin-Rechten ausführen lässt, weil das Cleaningtool sonst versagen dürfte. :stupid:

FriFra 14. Aug 2005 16:42

Re: Inno Setup - {userappdata} aller User des Systems ermitt
 
Ich hab mir jetzt was gebastelt um an alle bettr. Ordner heran zu kommen...
Delphi-Quellcode:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  UserFolders, Appdata, Users, Folder:string;
  FindRec: TFindRec;
begin
  if CurUninstallStep=usPostUninstall then
  begin
    UserFolders := ExpandConstant('{commonappdata}');
    if Copy(UserFolders, Length(UserFolders),1) = '\' then
      UserFolders := Copy(UserFolders, 1, Length(UserFolders) - 1);
    While Copy(UserFolders, Length(UserFolders), 1) <> '\' do
      UserFolders := Copy(UserFolders, 1, Length(UserFolders) - 1);
    AppData := Copy(ExpandConstant('{commonappdata}'), Length(UserFolders), Length(ExpandConstant('{commonappdata}')));
    UserFolders := Copy(UserFolders, 1, Length(UserFolders) - 1);
    While Copy(UserFolders, Length(UserFolders), 1) <> '\' do
      UserFolders := Copy(UserFolders, 1, Length(UserFolders) - 1);
    if FindFirst(ExpandConstant(UserFolders + '\*'), FindRec) then
    begin
      try
        repeat
          if Copy(FindRec.Name, 1, 1) <> '.' then
          begin
            Folder := UserFolders + FindRec.Name + Appdata;
            if DirExists(Folder) = True then
            begin
              //Do something...
              msgbox(Folder, mbInformation, mb_Ok);
            end;
          end;
        until not FindNext(FindRec);
      finally
        FindClose(FindRec);
      end;
    end;
  end;
end;

FriFra 14. Aug 2005 17:04

Re: Inno Setup - {userappdata} aller User des Systems ermitt
 
Jetzt hab ich nur noch ein Problem...
Kann ich innerhalb der CurUninstallStepChanged procedure irgendwie auslösen, dass InnoSetup die Meldung "Deinstallation unvollständig" anzeigt?


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