![]() |
Alle User auslesen
Hi,
wie kann man denn alle User auslesen? (Also alle User, die unter Systemsteuerung -> Benutzerkonten zu finden sind) Hab es schon versucht, einfach alle Ordner in C:\Dokumente und Einstellungen zu nehmen, aber das sind irgendwie viel mehr... Danke schonmal, für eure Hilfe! |
Re: Alle User auslesen
Auf Luckies Homepage gibt es da eine Unit die das glaub ich kann.
|
Re: Alle User auslesen
|
Re: Alle User auslesen
Danke!
Die Suche hatte ich zwar benutzt, aber irgendwie nichts gefunden :oops: |
Re: Alle User auslesen
Hi,
Leider ist es doch nicht so einfach, wie ich dachte... zwei Fragen zu ![]() Geht das auch ohne die JEDIs ? Ist es irgendwie möglich, hinter bzw. vor den Usernamen Environment-Variablen zu setzen ? Bsp: C:\Dokumente und Einstellungen\<Username>\Startmenü |
Re: Alle User auslesen
also äh... du solltest ja irgendwo den benutzernamen als string herbekommen. Mit diesem string kannst du machen, was du willst, also auch
Zitat:
|
Re: Alle User auslesen
Zitat:
![]() |
Re: Alle User auslesen
Zitat:
Bsp.: C:\Dokumente und Einstellungen\UserX\Startmenü Wie kann man das mit Environment-Variablen lösen ? @Luckie: Die Unit sieht ja sehr umfangreich aus, welche Funktion muss ich denn da nehmen? Kannst Du mir evtl. ein Beispiel geben? |
Re: Alle User auslesen
push^^
|
Re: Alle User auslesen
Delphi-Quellcode:
Was ist daran jetzt so schwer?
uses
MpuNTUser; function EnumUserCallback(Username: string; cntUsers: Integer; Data: Pointer): Boolean; begin TListBox(Data).Items.Add(Username); Result := True; end; procedure TForm1.Button1Click(Sender: TObject); begin EnumUsers('', FILTER_NORMAL_ACCOUNT, EnumUserCallback, Listbox1); end; |
Re: Alle User auslesen
@Luckie:
Danke :thumb: Jetzt muss ich es nur noch irgendwie hinkriegen, bestimmte Ordner von den Usern auszulesen. Mit Environment-Variablen kann ich ja nur auf All Users oder den aktuellen User zugreifen... :gruebel: |
Re: Alle User auslesen
Hm....
Hat denn keiner einen Vorschlag? Es geht um folgendes: Wenn ein Programm deinstalliert wird, sollen natürlich die entsprechenden Dateien bei allen Usern aus %AppData%\Mein Programm gelöscht werden. Dazu lese ich nach Luckie's Methode alle User aus, aber wie geht es dann weiter? Wie macht ihr so was? |
Re: Alle User auslesen
Hm...
Ist es denn nicht möglich, einen ordentlichen Uninstaller zu bauen, der die Einstellungen von allen Usern restlos entfernt (s. vorherige Beiträge) ? |
Re: Alle User auslesen
Moin Martin,
wenn Du das alles selber machen willst, dann sollte sich Dein Programm schlicht merken unter welchen Usern es gestartet wurde (am Besten inclusive Profilpfad). |
Re: Alle User auslesen
Zitat:
Angenommen ein User hat ziemlich wenig Rechte und kann nur in seinem eigenen User-Verzeichnis schreiben. Wo soll ich das dann speichern (den Pfad des Users), wenn dieser unter C:\Programme keine Schreib-Rechte hat??? |
Re: Alle User auslesen
Hi!
Selbst wenn du weißt, wo du was löschen wolltest, werden dir wohl bei einem Nicht-Administrator die Rechte dazu fehlen, um die Dateien zu löschen. Im Ordner eines anderen Users zu löschen ist "verboten" und das ist auch gut so ;) Ciao Frederic |
Re: Alle User auslesen
Hm...
Natürlich muss die Deinstallation von einem Administrator durchgeführt werden. Aber ein guter Uninstaller zeichnet sich doch dadurch aus, dass alle Daten, die ein Programm hinterlässt, restlos gelöscht werden - und ich finde, das sollte auch für alle User gelten. Wo ist denn sonst der Sinn, wenn das Programm (z.B. in C:\Programme) nicht mehr da ist, aber irgendein User noch Einstellungen (z.B. INI-Datei) von diesem Programm in seinen Anwendungsdaten hat? Aber zum eigentlichen Problem: Ist es denn nicht möglich, spezielle Pfade (Environment-Variablen) für einen UserX auszulesen - oder geht das nur für die, des aktuellen Users? |
Re: Alle User auslesen
Zitat:
|
Re: Alle User auslesen
Irgendwie gefällt mir das alles nicht, wenn ein Programm nach der Deinstallation noch irgendwo Daten hinterlässt.
Dann ist es wohl doch besser, in die Registry zu speichern... denn da ist es einfach, die Einstellungen eines Programms bei allen Usern zu entfernen: Einfach in einer For-Schleife alle Unterschlüssel von HKEY_USERS durchgehen :wink: |
Re: Alle User auslesen
Du könntest als Alternative eine Meldung ausgeben, das dein Programm nicht berechtigt war Daten zu löschen und dass man das doch bitte "per Hand" tuen soll. Dann gibst du den/die Ordner an und gut. Hab ich schon öfters gesehen.
MfG freak |
Re: Alle User auslesen
Moin Martin,
wenn keine Reste verbleiben sollen, dann wäre es wohl besser keine userspezifischen Daten zu speichern. Und ich kann kein Problem darin erkennen, dass userspezifische Daten erhalten bleiben können. Dann kann sich jemand zumindest seine Konfiguration auf ein anderes System retten. Zumindest sollte bei der Deinstallation die Option für den Erhalt der Daten gegeben sein. Wenn die Daten im Profil gespeichert werden (wo sie ja auch hingehören), dürfte es ja kein Problem sein, durch alle Profile auf dem Rechner durchzugehen, und zu prüfen, ob sich dort Daten des Programmes befinden. |
Re: Alle User auslesen
Zitat:
|
Re: Alle User auslesen
Moin Lukas,
Zitat:
|
Re: Alle User auslesen
Zitat:
Angenommen ein User hat in seinen Eigenen Dateien (die sind auch in einem Unterordner von Dokumente und Einstellungen) eine INI-Datei, die rein zufällig genauso heißt wie die meines Programms, dann wird die auch gelöscht ... Nein, es sollte schon irgendwie mit den AppData abhängig von den ausgelesenen Usernamen (Luckies Code) gehen... |
Re: Alle User auslesen
Hi,
ich habe mich jetzt nochmal näher mit der Registry beschäftigt und v. a. mit der Frage, wie man spezielle Ordner-Pfade von anderen Benutzern (also nicht All Users und nicht der aktuelle User) bekommt. Natürlich geht es hierbei um den Hauptschlüssel HKEY_USERS: Unter <Nummer (mit Schleife durchgehen)>\Software\Microsoft\Windows\CurrentVer sion\Explorer und dem Eintrag Logon User Name kann der Benutzername und unter dem Unterschlüssel \Shell Folders können die Pfade der speziellen Ordner herausgefunden werden. Meine erste Frage: Kann dies verallgemeinern? Funktioniert das auch bei älteren Windows-Versionen? Der Eintrag Logon User Name ist allerdings nicht bei allen Schlüsseln vorhenden, bei folgenden ist er nicht zu finden: S-1-5-18 //Mischung aus aktueller User, Network Service, WINDOWS S-1-5-19 //LocalService S-1-5-20 //NetworkService Meine zweite Frage: Kann man die auch verallgemeinern? (Also dass S-1-5-19 für LocalService und S-1-5-20 für NetworkService steht)? Auch ältere Win-Versionen? Meine dritte Frage: Fangen die Schlüssel für alle anderen Benutzer mit S-1-5-21... an? Ist das allgemein so? Auch ältere Win-Versionen? Dann noch was: Zu jedem Schlüssel gibt es noch einen Schlüssel der mit der selben Nummer beginnt und dann ein ..._Classes dahinter hat. Diese enthalten jedoch keine Shell Folders. Ach ja, und der Schlüssel .DEFAULT enthält dasselbe wie der Schlüssel S-1-5-18. Wäre jetzt nett, wenn mir jemand bei meinen Fragen helfen könnte oder ist das auslesen der Shell Folders über die Registry evtl. nicht so der gute Weg ? - Danke schonmal! - |
Re: Alle User auslesen
Benutzerspezifische Ordner bekommst du mit
Delphi-Quellcode:
. :)
SHGetSpecialFolderLocation()
|
Re: Alle User auslesen
Zitat:
|
Re: Alle User auslesen
Hab noch mal genauer (auf einem Rechner, auf dem mehrere Benutzer sind) in die Registry geschaut und festgestellt:
Unter HKEY_USERS sind doch nicht alle Benutzer zu finden. :( ...sind doch nur: aktueller User, LocalService und NetworkService. Frage: Kann man denn überhaupt nicht über die Registry an die Einträge anderer User dran kommen ? Hat denn jeder User seine "eigene Registry" ? Wäre nett, wenn mir einer die einzelnen Schlüssel unter HKU genauer erklären könnte. Zitat:
|
Re: Alle User auslesen
Moin Martin,
Zitat:
Du kannst doch einfach durch "Dokumente und Einstellungen" gehen, baust Dir damit eine Liste der möglichen "echten" User auf (also ohne "All Users", "Default User" usw.), und gehst dann durch, ob sich dort ein entsprechender Pfad befindet, wie ihn Dein Programm angelegt hat. Wenn sich das Programm nur userspezifisch installieren lässt, kannst Du fast schon das Filtern weglassen. Es ist allerdings nicht unüblich bei der Grundkonfiguration, zumindest von Firmenrechnern, alle Programme als lokaler Administrator zu installieren, und zum Schluss dann das Administratorprofil in das Defaultuser-Profil zu kopieren, damit jeder Anwender bei der Anmeldung die Grundkonfiguration zur Verfügung hat. Bei entsprechend erstellten MSI-Installationen kann man sich das zwar sparen, aber die sind nun auch nicht so zahlreich ;-) Trotzdem: Ich halte nichts davon einfach solche Dateien zu löschen. Übrigens hilft Dir "Logon User Name" nicht unbedingt, da der Anmeldename nicht als Profilname auftauchen muss. Befindet sich der Rechner in einer Domäne, und wird ein Account umbenannt, so ändert sich nicht der Name im Profil, da der Profilpfad durch die User-SID zugeordnet wird, und nicht durch den Anmeldenamen. |
Re: Alle User auslesen
Danke erstmal für Deine Antwort.
Aber das mit dem Durchsuchen überhaupt gefällt mir nicht so gut. Ich glaube mit dem auslesen der Shell Folders aus HKU komme ich auch nicht weiter. Oder gibt es irgendwie die Möglichkeit, spezielle Ordner anderer Benutzer über die Registry zu erhalten ? Kann man überhaupt auf Einträge anderer Benutzer in der Registry zugreifen??? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz