Autor Beitrag
Wraith
Hält's aus hier
Beiträge: 12

Win XP
Delphi 6
BeitragVerfasst: Do 22.02.07 15:50 
Hallo, folgendes Problem:
Unter Win XP konnte man, um anwendungs- bzw. userbezogene Daten zu speichern, die Umgebungsvarialble "APPDATA" ermitteln.
I.d.R. "Dokumente und Einstellungen/<UserName>/Anwendungsdaten".
Dort konnte man schreiben, Unterverzeichnisse anlegen usw., auch wenn der aktuelle User nur eingeschränkte Rechte hatte.
Die Abfrage erfolgte mit folgendem Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    appAnwRoot  := GetEnvironmentVariable('APPDATA')+'\'+rootName;
    if not DirectoryExists(appAnwRoot) then
     if not ForceDirectories(appAnwRoot) then begin
       Result:=False;
       Exit;
     end;
    appAnwRoot:=appAnwRoot+'\';


Dies hat in allen Programmen bisher tadellos funktioniert.
Wenn man so ein Programm nun unter Vista startet, passiert nichts und es werden dann auch keine programm- oder userspezifischen Sachen gespeichert.
Weiß jemand, woran es liegen könnte oder ob unter Vista diese Umgebungsvariable bzw Verzeichnisstruktur nicht mehr existiert? Könnte ich mir zwar nicht vorstellen, denn viele Programme legen sich dort Verzeichnisse und Dateien an.
Wäre schön, wenn das jemand weiß :)

Moderiert von user profile iconChristian S.: B- durch Delphi-Tags ersetzt
Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 22.02.2007 um 15:54
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 22.02.07 15:53 
Das Verzeichnis wird bei mir unter Vista korrekt als c:\users\{NUTZERNAME}\AppData\Roaming zurückgegeben. Mit meinen eigenen Programmen (ohne Adminrechte) kann ich da, wie es sein sollte, auch problemlos reinschreiben.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Wraith Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 6
BeitragVerfasst: Do 22.02.07 16:06 
user profile iconChristian S. hat folgendes geschrieben:
Das Verzeichnis wird bei mir unter Vista korrekt als c:\users\{NUTZERNAME}\AppData\Roaming zurückgegeben. Mit meinen eigenen Programmen (ohne Adminrechte) kann ich da, wie es sein sollte, auch problemlos reinschreiben.


Danke, dann muss ich mal nachgrasen, woran das liegen könnte, und ob die Function ForceDirectories auch unter Vista noch geht.
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.02.07 23:58 
du weisst ja, es gibt zwei funktionen forcedirectories, wobei die eine (unit: FileCtrl) veraltet ist.. vielleicht liegts daran... :gruebel:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.02.07 00:13 
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 23.02.07 00:36 
@Luckie: Ich glaube nicht, dass das Problem löst. Denn das er versucht ja ganz korrekt in das entsprechende Verzeichnis (unter XP, wie in Deinem Artikel, "C:\Dokumente und Einstellungen\<Benutzername>\Anwendungsdaten.", unter Vista wie von mir genannt) zu schreiben.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.02.07 01:18 
Sorry war gerade am telefonieren und konnte nicht viel dazu schreiben. Ich wollte sagen, er soll es mal mit der API Funktion probieren den Pfad zu finden, antatt mit der Umgebungsvariable, Dann würde ich noch vorschlagen, er soll sich mal den Pfad ausgeben lassen der dabei rauskommt und mal GetLastError aufrufen zur Fehlerdiagnose.

Was ist rootname und wie kommt der Inhalt dieser Variablen zu stande?

Alles im allen gibt es ein paar Fehlerquellen und auch entsprechend Methoden der Fehlerdiagnose, die bisher nochnicht durchgeführt wurden.

Oder anders gesagt: Der Fragesteller hat noch nicht seine Hausaufgaben gemacht. ;)
Wraith Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 6
BeitragVerfasst: Fr 23.02.07 11:19 
Titel: Re
So, es hat sich alles geklärt. Ich habe mir extra ein kleines Tool geschrieben, dass über GetEnvironmentVariable('APPDATA') das Verzeichnis ermittelt, in diesem Verzeichnis ein Unterverzeichnis anlegt und darin eine Datei abspeichert.
Anschließend das Vorhandensein der Datei prüft, sie wieder löscht und das Unterverzeichnis ebenfalls löscht.
Und es funktioniert unter XP genauso wie unter Vista.
Die Ursache für die Panik war ein Programm, dass sich ebenfalls dort ein Verzeichnis anlegt und darin für jeden im Programm eingeloggten User ein Verzeichnis mit dem Usernamen anlegt. Beim Programmstart werden die Verzeichnisse eingelesen und aufgelistet, so dass jeder User nur seinen Namen anklicken brauch, um sich damit im Programm einzuloggen.
Dazu wurde wurde folgende Routine benutzt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure GetDirectoryNames(Verzeichnis: String);
var SR: TSearchRec;
begin
  if FindFirst(Verzeichnis+ '*.*', faDirectory, SR)=0 then begin
    repeat
      if ((SR.Attr and faDirectory = faDirectory)and(SR.Name[1] <> '.')) then
       if (SR.Attr and faDirectory > 0) then UserBox.Items.Add(sr.name);
    until FindNext(SR)<>0;
    FindClose(SR);
  end;
end;

Im Quellcode des Programms stand allerdings "FindFirst(Verzeichnis+'*', faDirectory, SR)=0....".
Was unter XP (seltsamerweise) funktionierte, aber nicht unter Vista. Dort muss es (wie eigentlich üblich) *.* heißen.
Nach der Korrektur klappte auch unter Vista alles genauso, wie unter XP.

Und nochmal Danke für eure Mühe!

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt