Autor Beitrag
Nano-Ware
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: Mi 09.12.09 11:45 
Hi,

ich wollte nur fragen, wo ich meine Dateien für mein Programm ohn Administratorrechte ablegen darf (bitte Variable dazu :wink:)

Also ich bräuchte einen Ordner (keinen Temporären, sondern einen wo die Programmeinstellungen gespeichert werden) der nur für einen Benutzer gilt

Dann einen Temporären, der nur für einen Benutzer gilt

Und einen NICHT temporären Ordner, wo ich für JEDEN Benutzer Dateien speichern kann (auch Einstellungen)

WICHTIG: Es dürfen keine Adminrecht benötigt werden (Ordner werden dann beim Setup erstellt)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 09.12.09 11:53 
Am besten ist dafür das User-Verzeichnis geeignet. Also C:\Dokumente und Einstellungen\username\usw. Und da dann in den Anwendungsdaten-Ordner.

Das Verzeichnis bekommt man über die API - such mal nach Suche in der Entwickler-Ecke GETSHELLFOLDER. Die benötigte Konstante für den Anwendungsdaten-Ordner ist const CSIDL_APPDATA = $001a;

_________________
We are, we were and will not be.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 09.12.09 12:21 
Und wo ist der Unterschied, zu deinem anderen Thread?
www.delphi-forum.de/viewtopic.php?t=96418

_________________
PROGRAMMER: A device for converting coffee into software.
Nano-Ware Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: Mi 09.12.09 14:11 
Der Unterschied ist, dass ich in meinem alten Thread gefragt hab ob ich Dateien im eigenen Programmordner speichern darf und jetzt will ich wissen wo diese Ordner sind :wink:

C:\Users\[User]\AppData\Roaming also da schein ich ja was speichern zu dürfen^^ gibts da bei Delphi 2010 ne Konstante dafür?

Weil unter Projekt->Optionen->Debugger->Umgebungsblock da hab ich die Konstante APPDATA gefunden hat das was damit zu tun, also passt die sich dem System an?

Und in welchen Dateipfad mit welcher Konstante kann ich ohne Adminrechte Dateien für alle Benutzer speichern?


Sry wenn ich jetzt wieder frag, aber ichh hab da oben nur Bahnhof verstanden :wink: nich böse gemeint^^
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 09.12.09 14:14 
In genanntem Thread hab ich eine Anleitung verlinkt, wo genau erklärt wird, wie man den PFad unter verschiedenen Betriebssystemen herausbekommt.

_________________
PROGRAMMER: A device for converting coffee into software.
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mi 09.12.09 14:38 
user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:

C:\Users\[User]\AppData\Roaming also da schein ich ja was speichern zu dürfen^^ gibts da bei Delphi 2010 ne Konstante dafür?


Gausi hat dir doch schon gesagt was du machen musst. Die Funktion GetShellFolder einbinden und diese dann mit der Konstante CSIDL_APPDATA als Parameter aufrufen. Ein Verzeichnis in dem alle User schrieben drüfen ist das AllUser-Verzeichnis. Du bekommst es auf selben Weg mit der Konstante CSIDL_COMMON_APPDATA

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  s: String;
begin
  s := GetShellFolder(CSIDL_APPDATA);  //Pfad holen
  s := IncludeTrailingPathDelimiter(s); //Abschließenden Backslash anfügen
  if ForceDirectories(s + 'DeinProgName\'then  //Unterverzeichnis mit dem Namen deines Programms anlegen
  begin
    //In s + 'DeinProgName\' kannst du jetzt Programmeinstellungen abspeichern
  end;
end;
Nano-Ware Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: Do 10.12.09 21:54 
Ok danke, wie ist das eigentlich? Wenn ich einen Ordner in "Programme" hab (C:/Pragram Files/MyPrograms/Data/) und da noch einen Unterordner "Data". Wenn ich jetzt im Ordner "Data" eine Translate.xxx hab kann ich die dann als "MyPrograms" auch ohne Adminrechte lesen betonung auf LESEN^^
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 10.12.09 21:57 
Lesen geht. ;-)

_________________
We are, we were and will not be.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 10.12.09 22:16 
Auch wenn ich mich wiederhole..
Pfade unter Windows mit \

_________________
PROGRAMMER: A device for converting coffee into software.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 10.12.09 23:56 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Auch wenn ich mich wiederhole..
Pfade unter Windows mit \

Das ist richtig. Standard ist der "\", aber Windows kann auch mit "/" arbeiten, das macht keinen Unterschied.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 11.12.09 00:12 
user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
Also ich bräuchte einen Ordner (keinen Temporären, sondern einen wo die Programmeinstellungen gespeichert werden) der nur für einen Benutzer gilt
Dafür geht das oben genannte Verzeichnis für die Anwendungsdaten.
Wenn du es dir einfach machen willst, kannst du auch meine Config Utils verwenden, dann kannst du dem Benutzer die Wahl lassen ob er es portabel nutzen will oder fest installiert. Du selbst musst dich dann nicht drum kümmern.

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
Dann einen Temporären, der nur für einen Benutzer gilt
Das ist der normale Temp-Ordner, den du via GetTempPath herausbekommst. Via GetTempFileName kannst du auch direkt einen Dateinamen bekommen.

Wie das in Delphi verwendet wird kannst du z.B. hier sehen:
www.delphi-library.d...iewtopic.php?t=89603

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
Und einen NICHT temporären Ordner, wo ich für JEDEN Benutzer Dateien speichern kann (auch Einstellungen)

WICHTIG: Es dürfen keine Adminrecht benötigt werden (Ordner werden dann beim Setup erstellt)
Das ist so nicht möglich! Wenn du in die Anwendungsdaten für alle Benutzer Daten schreibst, dann geht das AFAIK unter Windows 2000 nur mit Adminrechten. Ab Windows XP geht es zwar ohne, aber nur der Besitzer hat Schreibrechte in die Dateien, d.h. alle anderen können diese ohne Adminrechte nur lesen.

Das ist auch gut so, damit man nicht die Daten anderer Nutzer zerstören kann. Man kann aber über dieses Verzeichnis einen Import einrichten, so dass dort die Daten abgelegt und von den anderen Nutzern beim Start der Software eingelesen werden. Änderungen müssen dann ebenfalls dort abgelegt und beim Start unter anderen Benutzern importiert werden.

Andere Möglichkeit: In den gemeinsamen Anwendungsdaten (unter All Users) vom Setup einen Ordner erstellen lassen und dort (beim Setup ja mit Adminrechten) die ACLs des NTFS-Dateisystems modifizieren, so dass jeder Benutzer darin schreiben kann.