Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   AppData Folder wird falsch zurück gegeben von Windows (https://www.delphipraxis.net/156444-appdata-folder-wird-falsch-zurueck-gegeben-von-windows.html)

Cylence 2. Dez 2010 09:24

AppData Folder wird falsch zurück gegeben von Windows
 
Hi,

wir haben einen Kunden(unter 20000) bei dem funktioniert das auslesen des Appdata Pfades nicht richtig, wir lesen den Pfad so aus:

Delphi-Quellcode:
const
 ExplorerKey = '\Software\Microsoft\Windows\CurrentVersion\Explorer\';
begin
  Reg := TRegistry.Create;
  Reg.Access := KEY_READ;
  try
    Reg.RootKey := HKey_Current_User;
    if Reg.OpenKey(ExplorerKey + 'Shell Folders', FALSE) then
    begin
      FAppData := Reg.ReadString('AppData');
    end;
bei jedem anderen user kommt da der richtige appdata pfad raus unter dem usernamen, wie man es bei vista/7 nutzen sollte. Aber unter einem Rechner, kommt als Ergebnis dieser Pfad raus:

C:\Windows\system32\config\systemprofile\AppData\R oaming

und da hat der user keine schreibrechte und somit geht die aktion schief, dort sollten programmeinstellungen in einer IniDatei gespeichert werden.

Eigentlich, bei allen anderen rechnern kommt dieser Pfad raus:

C:\Users\USERNAME\AppData\Roaming

wie kann das sein? Kennt jemand das Problem?

Thanks

tom

holliesoft 2. Dez 2010 09:36

AW: AppData Folder wird falsch zurück gegeben von Windows
 
Hi,

über die Registry würde ich den Pfad nicht auslesen, sondern über die entsprechenden Shell-Funktionen.
In der Code Lib gibt es dazu was.
Wird mit dieser Methode der selbe falsche Pfad ausgegeben?
Wenn Du an dem betroffenen Rechner im Explorer in der Adresszeile "%appdata%" eingibst und ENTER drückst, landet Du da in dem selben falschen Pfad? wenn ja, dann ist die Konfiguration dieses Rechners schief.

gruß
Patrick

Sir Rufo 2. Dez 2010 10:37

AW: AppData Folder wird falsch zurück gegeben von Windows
 
und das geht ganz gemütlich mit der Unit die du hier findest
Darin hast du auch eine nette Procedure, die alle SpecialFolders ausliest und in eine StringList packt.

Delphi-Quellcode:
procedure GetDirList( const DirList : TStringList; const WithRights : Boolean = False );
Damit kannst du dir auch eine MiniProg bauen, und die Ergebnisse in einem Memo anzeigen lassen (oder per Mail schicken lassen, whatever).
Die einzelnen Rechte kann man sich damit auch gleich auslesen und hat somit eine schnelle Information, was auf dem Kundenrechner geht und was nicht ;)

Luckie 2. Dez 2010 10:46

AW: AppData Folder wird falsch zurück gegeben von Windows
 
Bitte lesen und dann ganz fix das Programm ändern:
http://blogs.msdn.com/b/oldnewthing/.../03/55532.aspx

Cylence 2. Dez 2010 12:37

AW: AppData Folder wird falsch zurück gegeben von Windows
 
Hi,

ok ich werd das mal weiter geben :-) danke für die schnelle Hilfe!
Ich verwende in meinen Projekten auch teilweise die JvComputerInfosEx aus den JediTools.
die machen das da so:

Delphi-Quellcode:
function GetAppdataFolder: string;
begin
  {$IFDEF CLR}
  Result := System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
  {$ELSE ~CLR}
  Result := GetSpecialFolderLocation(CSIDL_APPDATA);
  {$ENDIF ~CLR}
end;


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