Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Wo müssen Applikationsdaten unter Win 7 gespeichert werden? (https://www.delphipraxis.net/167434-wo-muessen-applikationsdaten-unter-win-7-gespeichert-werden.html)

Rolf Fankhauser 29. Mär 2012 12:24

Betriebssystem: Win 7

Wo müssen Applikationsdaten unter Win 7 gespeichert werden?
 
Hallo alle zusammen,

Ich möchte meine Delphi-Applikation Win 7-konform machen. Verschiedene Daten-Files, die die Applikation benötigt, werden immer noch im Programm-Ordner abgelegt.

Die Empfehlungen von Microsoft im Dokument "Windows® 7 Client Software Logo"
sind folgende:
  • All application data that must be shared
    among users on the computer should be
    stored within ProgramData
  • All application data exclusive to a specific user
    and not to be shared with other users of the
    computer must be stored in
    Users\<username>\AppData

Diese Angaben scheinen mir etwas ungenau.

Da ich meine Applikation noch unter XP entwickle, habe ich nur eine VM mit Win 7 zur Verfügung, wo ich die Installation austeste. Bei diesem Win 7 besteht das Verzeichnis ProgramData aus alles gelockten Verzeichnissen (ausser Microsoft). Die anderen Verzeichnisse kann man nicht öffnen (access denied).

Kann mir jemand sagen, wo man die Daten genau hinschreiben muss?
z.B. Verzeichnis [App-Name] unter ProgramData oder
Verzeichnis [App-Name] unter C:\ProgramData\Application Data\ oder....

Vielen Dank für euere Hilfe!

Rolf

Luckie 29. Mär 2012 12:32

AW: Wo müssen Applikationsdaten unter Win 7 gespeichert werden?
 
Do wo sie auch schon unter Windows XP hingehört haben. Ich nehme mal an, du hast dein Programm unter XP noch nie als normaler Benutzer ausgeführt. Hol dir mit den SpecialFolder Funktionen das Appdata Verzeichnis und sie sollten da landen, wo sie unter dem jeweiligen Betriebsystem hingehören.

generic 29. Mär 2012 13:54

AW: Wo müssen Applikationsdaten unter Win 7 gespeichert werden?
 
Wenn SharedData genutzt werden soll, dann muss in ProgramData ein Ordner mit passenden Rechten angelegt werden (wenn alle Benutzer dort schreiben soll).
Lesend ist kein Problem.

Wie Luckie schon schreibt, nutze die API Funktionen und die Ordnerpositionen zu ermitteln.

Rolf Fankhauser 29. Mär 2012 17:19

AW: Wo müssen Applikationsdaten unter Win 7 gespeichert werden?
 
Danke Luckie und generic für eure rasche Antwort!

Nur kann ich diese API-Funktionen nicht finden. Jedenfalls finde ich nichts unter SpecialFolder und AppData, auch nicht in der Windows SDK. Ich nehme an, dass es unter Windows Environment-Parameter gibt, die entsprechend gesetzt sind.
Ich kenne von Inno Setup entsprechende Konstanten wie {commonappdata} und {userappdata}, aber weiss nicht, wie man diese in Delphi oder C++Builder abruft.

DeddyH 29. Mär 2012 17:23

AW: Wo müssen Applikationsdaten unter Win 7 gespeichert werden?
 
SHGetFolderPath oder SHGetKnownFolderPath sind Deine Freunde. Dazu muss die Unit SHFolder eingebunden werden.

himitsu 29. Mär 2012 17:24

AW: Wo müssen Applikationsdaten unter Win 7 gespeichert werden?
 
Zitat:

Jedenfalls finde ich nichts unter SpecialFolder und AppData,
Nicht?

Hier im Forum suchenSpecialFolder AppData
Hier im Forum suchenGetSpecialFolderLocation
...

[edit]
zu lahm (ich wünschte mir, wir hätten eine RedBox)

Luckie 29. Mär 2012 17:27

AW: Wo müssen Applikationsdaten unter Win 7 gespeichert werden?
 
[QUOTE=himitsu;1159293]
Zitat:

[edit]zu lahm (ich wünschte mir, wir hätten eine RedBox)
Die ist mit Daniel in Paris. Ich hoffe, er lässt sie nicht vom Eiffelturm fallen. ;)

Andreas L. 29. Mär 2012 18:04

AW: Wo müssen Applikationsdaten unter Win 7 gespeichert werden?
 
Du kannst die Funktion von Luckie verwenden:
http://michael-puff.de/Programmierun.../HOMEDIR.shtml
Delphi-Quellcode:
function GetShellFolder(CSIDL: integer): string;
var
  pidl                  : PItemIdList;
  FolderPath            : string;
  SystemFolder          : Integer;
  Malloc                : IMalloc;
begin
  Malloc := nil;
  FolderPath := '';
  SHGetMalloc(Malloc);
  if Malloc = nil then
  begin
    Result := FolderPath;
    Exit;
  end;
  try
    SystemFolder := CSIDL;
    if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then
    begin
      SetLength(FolderPath, max_path);
      if SHGetPathFromIDList(pidl, PChar(FolderPath)) then
      begin
        SetLength(FolderPath, length(PChar(FolderPath)));
      end;
    end;
    Result := FolderPath;
  finally
    Malloc.Free(pidl);
  end;
end;
Bsp.:
Delphi-Quellcode:
uses
  ..., Windows, ShlObj, ActiveX;

...

var
  path: String;
begin
  path := GetShellFolder(CSIDL_APPDATA);
  path := IncludeTrailingPathDelimiter(path);
  ShowMessage(path);
end;
Liste aller CSIDL-Konstanten:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

DeddyH 29. Mär 2012 18:09

AW: Wo müssen Applikationsdaten unter Win 7 gespeichert werden?
 
Zitat:

Zitat von MSDN
[SHGetSpecialFolderLocation is not supported and may be altered or unavailable in the future. Instead, use SHGetFolderLocation.]

Außerdem ist es doch vergleichsweise umständlich gegenüber den SHGetFolderPath-Varianten (OK, früher ging das nicht anders, aber deshalb muss man ja nichts Altes verwenden).


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