Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verzeichnisrechte unter Vista (https://www.delphipraxis.net/98229-verzeichnisrechte-unter-vista.html)

Master-of-Magic 24. Aug 2007 10:02

Re: Verzeichnisrechte unter Vista
 
hoika hats erfasst. Alle Anwendungsdaten gehören in das "Anwendungsdaten"-Verzeichnis des Systems/Benutzers.

Das EINZIGE was unter Programme liegen sollte, sind statische Daten (Ressourcen etc.) und die Anwendungen. Sich ändernde Dinge wie Zinsdaten sollten grundsätzlich unter
Delphi-Quellcode:
var
  path: array[0..MAX_PATH] of char;
begin
  SHGetFolderPath( 0, CSIDL_APPDATA, 1, 0, @path[0]);
  SHGetFolderPath( 0, CSIDL_LOCAL_APPDATA, 1, 0, @path[0]);
  SHGetFolderPath( 0, CSIDL_COMMON_APPDATA, 1, 0, @path[0]);
end;
// Code ungetestet!
gespeichert werden!

Was das Update angeht: Normale Nutzer haben keinerlei Schreibrechte unter Programme, nur Admins dürfen das. PUNKT. Ich bin mir nicht mal sicher, ob unter Vista überhaupt Standardnutzer die Schreibrechte dafür bekommen könnten ...

Entweder du nutzt den Update-Dienst oder du drehst den Spieß um: Nicht die Clients holen sich das Update vom Server (Intranet?), sondern der Server startet ein Tool mit Adminrechten, dass die neuen Daten an die Clients verteilt - sofern das bei euch gehen würde.

edit: Delphi-Code korrigiert

emsländer 24. Aug 2007 10:17

Re: Verzeichnisrechte unter Vista
 
Zitat:

Zitat von Master-of-Magic
hoika hats erfasst. Alle Anwendungsdaten gehören in das "Anwendungsdaten"-Verzeichnis des Systems/Benutzers.

Das EINZIGE was unter Programme liegen sollte, sind statische Daten (Ressourcen etc.) und die Anwendungen. Sich ändernde Dinge wie Zinsdaten sollten grundsätzlich unter
Delphi-Quellcode:
SHGetFolderPath( 0, CSIDL_APPDATA, 1, 0, @path);
SHGetFolderPath( 0, CSIDL_LOCAL_APPDATA, 1, 0, @path);
SHGetFolderPath( 0, CSIDL_COMMON_APPDATA, 1, 0, @path);
// Code ungetestet!
gespeichert werden!

Was das Update angeht: Normale Nutzer haben keinerlei Schreibrechte unter Programme, nur Admins dürfen das. PUNKT. Ich bin mir nicht mal sicher, ob unter Vista überhaupt Standardnutzer die Schreibrechte dafür bekommen könnten ...

Entweder du nutzt den Update-Dienst oder du drehst den Spieß um: Nicht die Clients holen sich das Update vom Server (Intranet?), sondern der Server startet ein Tool mit Adminrechten, dass die neuen Daten an die Clients verteilt - sofern das bei euch gehen würde.

Unsere Software läuft nicht im Intranet, sondern ca. 5000 User laden sich die Updates über das Internet. Zinsdaten müssen täglich aktualisiert werden. Das Hauptproblem allerdings ist, das die Anwendung selbst alle paar Tage geändert werden muß, da sich nicht nur die Zinsen ändern, sondern auch div. Hypothekenberechnungsmodelle einiger Banken, so das die Software "lebt" und ich alle paar Tage ein Update bringen muss.

Gruss

EL

mirage228 24. Aug 2007 10:28

Re: Verzeichnisrechte unter Vista
 
Hi,

könnte man diese Berechnungen nicht in Module (Plugins, BPLs) auslagern und diese in den genannten Verzeichnissen ablegen?

mfG
mirage228

emsländer 24. Aug 2007 10:29

Re: Verzeichnisrechte unter Vista
 
Zitat:

Zitat von mirage228
Hi,

könnte man diese Berechnungen nicht in Module (Plugins, BPLs) auslagern und diese in den genannten Verzeichnissen ablegen?

mfG
mirage228

Schwierig bis fast unmöglich, da das der Programmkern (Scoring) ist
Ich frage mich ohnehin, wie ich dll´s ersetzen soll, wenn sich mal wieder eine zugekaufte Lib ändert...


Gruss

EL

messie 24. Aug 2007 10:30

Re: Verzeichnisrechte unter Vista
 
Zitat:

Zitat von emsländer
Unsere Software läuft nicht im Intranet, sondern ca. 5000 User laden sich die Updates über das Internet. Zinsdaten müssen täglich aktualisiert werden. Das Hauptproblem allerdings ist, das die Anwendung selbst alle paar Tage geändert werden muß, da sich nicht nur die Zinsen ändern, sondern auch div. Hypothekenberechnungsmodelle einiger Banken, so das die Software "lebt" und ich alle paar Tage ein Update bringen muss.

Das riecht nach Arbeit... Du wirst wohl nicht umhin kommen, auch die sich ändernden Berechnungsmodelle dorthin auszulagern.
Bei 5000 Usern könnte es sich aber lohnen, das über scriptgesteuerte MSI-Updates zu bewerkstelligen.

Grüße, Messie

emsländer 24. Aug 2007 11:09

Re: Verzeichnisrechte unter Vista
 
Zitat:

Zitat von Master-of-Magic
Das EINZIGE was unter Programme liegen sollte, sind statische Daten (Ressourcen etc.) und die Anwendungen. Sich ändernde Dinge wie Zinsdaten sollten grundsätzlich unter
Delphi-Quellcode:
SHGetFolderPath( 0, CSIDL_APPDATA, 1, 0, @path);
SHGetFolderPath( 0, CSIDL_LOCAL_APPDATA, 1, 0, @path);
SHGetFolderPath( 0, CSIDL_COMMON_APPDATA, 1, 0, @path);
// Code ungetestet!
gespeichert werden!

Nun mal ne ganz blöde Frage (bin im Moment total von der Rolle).
Im Moment speichere ich die Zins- und LizenzUpdates(verschlüsselt) in %program_path%\meineFirma.
Die vom Programm erzeugten Hypothekendateien (xml) in %program_path%\meineFirma\Daten.

Was schlagt Ihr vor, wo ich die Daten nun hinpacken soll? Ich möchte die Anwendung nicht für Vista UND XP getrennt pflegen müssen, sondern eine Anwendung, welche auf beiden Systemen läuft. Obenauf speichere ich einige Dinge in der Registry unter HKEY_CURRENT_USER ...

Achja, meine Entwicklungsumgebung läuft auf XP64

Gruss

EL

Luckie 24. Aug 2007 11:23

Re: Verzeichnisrechte unter Vista
 
Was spricht dagegen die vorgeschlagenen Verzeichnisse zu nehmen? Wobei ich CSIDL_APPDATA bevorzugen würde.

emsländer 24. Aug 2007 11:50

Re: Verzeichnisrechte unter Vista
 
Zitat:

Zitat von Luckie
Was spricht dagegen die vorgeschlagenen Verzeichnisse zu nehmen? Wobei ich CSIDL_APPDATA bevorzugen würde.

Ich denke mir, das ich dann für Zins- und Lizenzdaten \Documents and Settings\All Users\appdata ? und für die Daten (auf die ja alle zugreifen sollen) \Documents and Settings\All Users\shared Documents ?
Sollte dann doch so ok sein?

Wie komm ich an die Ordner? Denn die sind ja auch von Version zu Version unterschiedlich. Ich habe es mit DE, NL und EN Versionen von XP, XP64, Vista, Vista64

Gruss

EL

messie 24. Aug 2007 11:53

Re: Verzeichnisrechte unter Vista
 
War das nicht von Luckie?

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;
Das sollte auf allen Systemen funktionieren.

Grüße, Messie

Master-of-Magic 24. Aug 2007 12:07

Re: Verzeichnisrechte unter Vista
 
Die von Luckie ist wohl die 'sauberste'. Schnelle Lösungen hab ich oben gepostet - die sollten es auch tun. Hier nochmal der Hinweis auf das Video, dort wird das Ganze erklärt!

Da du in der Registry auf CURRENT_USER zugreifst gehe ich davon aus, dass dein Programm auch nur für den jeweiligen Benutzer und nicht für alle Benutzer des Computers gedacht ist. Ich würde daher auch wie Luckie meinte, CSIDL_APPDATA vorschlagen. Damit bekommst du mit seiner Funktion unter XP bei mir z.B. "C:\Dokumente und Einstellungen\Besitzer\Anwendungsdaten" - und auf anderen Systemen das entsprechende Verzeichnis.

Und wenn du die Daten doch für alle Nutzer eines Computers verfügbar machen möchtest, wäre CSIDL_COMMON_APPDATA dein Freund.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.
Seite 4 von 5   « Erste     234 5      

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