Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mal wieder das nervige Thema Speicherorte (https://www.delphipraxis.net/146205-mal-wieder-das-nervige-thema-speicherorte.html)

Jens Hartmann 15. Jan 2010 16:04


Mal wieder das nervige Thema Speicherorte
 
Hallo zusammen,

es wird hier zwar ständig durchgekaut, aber irgendwie bin ich mir immer noch nicht sicher was jetzt wirklich richtig ist. Ich habe hier schon mehrer Threads verfolgt und versucht diese Entscheidung mit den Speicherorten auch für mich zu übernehmen. Nachdem ich mit viel Mühe und Kleinarbeit mein Programm umgebaut habe, treten aber immer noch Fehler beim Speichern in einer einfachen INI Datei auf.

Die INI Datei habe ich in folgendem Verzeichnis gespeichert.

Betreibssystem Windows Vista

C:\ProgrammData\hu\inf\NetCon.ini

Bei XP hatte ich die mit dem selben Init-String
Delphi-Quellcode:
const
  strAppDataDir = '\HU\inf\';
....

var
  AppDataDir : string;
  sMessage : String;
begin
try
  AppDataDir := GetSpecialFolder(CSIDL_COMMON_APPDATA) + strAppDataDir;
in folgedem Verzeichnis...

C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\hu\inf\NetConf.ini

Entweder, habe ich immer da noch was falsch verstanden oder irgendwas falsch gemacht. Weil ich in dem Verzeichnis unter Vista manchmal speichern kann und manchmal nicht. Ich bin aber immer als Admin angemeldet. Und es müsste ja in dem Pfad auch als User gehen. ODER?

Gruß Jens

Uwe Raabe 15. Jan 2010 16:11

Re: Mal wieder das nervige Thema Speicherorte
 
Überprüf das mal in deinen Sourcen:

C:\ProgrammData\hu\inf\NetCon.ini
C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\hu\inf\NetConf.ini

Jens Hartmann 15. Jan 2010 16:18

Re: Mal wieder das nervige Thema Speicherorte
 
Der Pfad stimmt. Ich weiß nicht wo das Problem liegt. Seltsamer weiße tritt das Problem auch nicht immer auf. Ich muss das jetzt noch mal prüfen. Ich kann die Datei z.B. auch nicht von Hand ändern. Das heitßt ich muss dafür folgendes machen.

Datei Öffnen
Datei Ändern
Datei am selben Ort unter anderem Namen speichern
Orginal Datei löschen
Geänderte Datei wieder in Original Namen ändern
Jetzige Datei Öffnen
Datei wieder Ändern
Datei Speichern geht mit Orginal Namen. :gruebel:

Laptop AUS -> Laptop AN -> Problem wie eben erläutert

Gruß Jens

Uwe Raabe 15. Jan 2010 16:58

Re: Mal wieder das nervige Thema Speicherorte
 
Zitat:

Zitat von Jens Hartmann
Der Pfad stimmt.

Ich meinte eigentlich die Dateinamen - die sind nämlich unterschiedlich.

Jens Hartmann 15. Jan 2010 17:00

Re: Mal wieder das nervige Thema Speicherorte
 
Sorry, ist mir nicht aufgefallen. Ist aber nur ein TipFehler. Hatte das von Hand hier eingetragen.

Gruß Jens

Uwe Raabe 15. Jan 2010 17:10

Re: Mal wieder das nervige Thema Speicherorte
 
Ist "C:\ProgrammData" auch ein Tippfehler?

Jens Hartmann 15. Jan 2010 17:13

Re: Mal wieder das nervige Thema Speicherorte
 
Jupp :thumb:

Uwe Raabe 15. Jan 2010 17:17

Re: Mal wieder das nervige Thema Speicherorte
 
Wo kommt denn GetSpecialFolder her? Kann ich bei mir so nicht finden...

Jens Hartmann 15. Jan 2010 17:26

Re: Mal wieder das nervige Thema Speicherorte
 
Ist folgende procedure.

Das Ergebnis des Strings stimmt auch. Habe ich hundert mal probiert.

Delphi-Quellcode:
{Speicherpfad ermitteln um Speicherziel der User Einstellungen festzulegen}
function GetSpecialFolder (aFolder: Integer): String;
var
  pIdL: PItemIDList;
  Path: Array [0..Max_Path] of Char;
  Allocator: IMalloc;
begin
  // ItemIdList für den Ordner holen
  SHGetSpecialFolderLocation (0, aFolder, pIdL);

  // ItemIdList in String umwandeln lassen
  SHGetPathFromIDList (pIDL, Path);

  // Speicher wieder freigeben
  if Succeeded (SHGetMalloc (Allocator)) then
    begin
      Allocator.Free (pIdL);
      {$IFDEF VER100}
      Allocator.Release;
      {$ENDIF}
    end;
  Result := Path;
end;
Gruß Jens

Christian Seehase 15. Jan 2010 22:06

Re: Mal wieder das nervige Thema Speicherorte
 
Moin Jens,

Zitat:

Zitat von Jens Hartmann
Und es müsste ja in dem Pfad auch als User gehen. ODER?

In "All Users\Anwendungsdaten" hat der normale Benutzer keine Schreibrechte, sondern erst in Unterverzeichnissen.
Unter Windows Vista bzw. 7 habe ich noch nicht nachgesehen.
Schau doch einfach mal im Reiter "Sicherheit" welche Rechte ein Benutzer hat.

Jens Hartmann 16. Jan 2010 00:15

Re: Mal wieder das nervige Thema Speicherorte
 
Zitat:

Zitat von Christian Seehase
In "All Users\Anwendungsdaten" hat der normale Benutzer keine Schreibrechte, sondern erst in Unterverzeichnissen.

Und wo hat der normale User dann nun wirklich Schreibrechte. Ich bin übrigens auch Admin.

Christian Seehase 16. Jan 2010 01:40

Re: Mal wieder das nervige Thema Speicherorte
 
Moin Jens,

schau Dir einfach mal die Berechtigungen auf die Verzeichnisse bei einer Standardinstallation an.
Bei XP sollte ein normaler Benutzer im Verzeichnis %USERPROFILE%\Anwendungsdaten Schreibrechte haben.
Das das im All Users Profil nicht der Fall ist, ist auch logisch, damit sich verschiedene Benutzer nicht gegenseitig die Einstellungen zersemmeln können.
Als Admin solltest Du natürlich überall Schreibrechte haben (mal abgesehen von System Volume Information), soweit Dir nicht die UAC dazwischenhaut.

Um Grundeinstellungen zu verteilen, die für jeden User erst einmal gleich sein sollen, dann aber von jedem individuell geändert werden können, könnte man diese im Default User-Profil ablegen.
Dann würde jeder neue User die gleichen Grundeinstellungen bekommen.

Allgemein:
In das All Users-Profil gehören Daten, die für alle gleich sein sollen, aber, normaler Weise, nicht geändert werden.
In das User-Profil gehören Daten, die nur für diese User gelten sollen, und geändert werden dürfen.
Im Default-User-Profil können Daten hinterlegt werden, mit denen ein User-Profil initialisiert wird, wenn sich jemand das erste mal am System anmeldet.

FBrust 16. Jan 2010 02:14

Re: Mal wieder das nervige Thema Speicherorte
 
Hallo,

danke für die Auflistung, die für mich (endlich) etwas Klarheit bringt, aber eine Frage bleibt für mich dennoch offen:

Wo kommen Daten hin, die für alle User gelten sollen und geändert werden? Ich denke da z. B. an eine Datenbank, die die Stammdaten enthält, die sich auch hin und wieder ändern.

Ich hab diese Daten bisher (unter XP) in All Users\Anwendungsdaten\<Programmname>\ gespeichert. Im Userverzeichnis macht es keinen Sinn, weil es nur eine Datenbank geben soll, und Schreibrechte zum Ändern der Datenbank brauchen die Anwender schließlich auch.

Gruß
Frank

Christian Seehase 16. Jan 2010 11:43

Re: Mal wieder das nervige Thema Speicherorte
 
Moin Frank,

Zitat:

Zitat von FBrust
Wo kommen Daten hin, die für alle User gelten sollen und geändert werden? Ich denke da z. B. an eine Datenbank, die die Stammdaten enthält, die sich auch hin und wieder ändern.

da sehe ich mehrere Möglichkeiten:
Wenn es sich um Daten handelt, die nur von der Anwendung genutzt, aber nicht im Zuge der Nutzung geändert werden sollen, sollten sie unter All Users, oder auf einem Netzwerklaufwerk liegen.
Änderungen solcher Daten sollten nur durch administrative Updates erfolgen.
Es muss ja, ggf., auch jemand die Übersicht haben, dass alle mit den gleichen Daten arbeiten, falls die Software auf mehreren Rechner genutzt wird.

Bei Daten, die von der Anwendung genutzt und geändert werden sollen, und bei denen ein Netzwerklaufwerk oder ein entsprechender Server nicht in Frage kommt (warum auch immer), bleibt, meiner Ansicht nach, nichts anderes übrig, als sie unter All Users\Anwendungsdaten zu legen, und das Verzeichnis mit entsprechenden Rechten zu versehen.

FBrust 16. Jan 2010 13:12

Re: Mal wieder das nervige Thema Speicherorte
 
Hallo Christian,

das von Dir angesprochene Verfahren klingt sinnvoll, danke für die Klarstellung.


Gruß
Frank

Jens Hartmann 16. Jan 2010 13:30

Re: Mal wieder das nervige Thema Speicherorte
 
Zitat:

Zitat von Christian Seehase
Bei Daten, die von der Anwendung genutzt und geändert werden sollen, und bei denen ein Netzwerklaufwerk oder ein entsprechender Server nicht in Frage kommt (warum auch immer), bleibt, meiner Ansicht nach, nichts anderes übrig, als sie unter All Users\Anwendungsdaten zu legen, und das Verzeichnis mit entsprechenden Rechten zu versehen.

Das ist doch genau meine Meinung. Und das ist nämlich ein Problem. Also muss ich dem Verzeichnis die entsprechenden Rechte geben. In diesem Verzeichnis befindet sich Standardmäßig meine Datenbank und der Konfigurationsfile, wo diese Datenbank liegt.

Das ist auch richtig so, weil ich nicht mehrer Datenbanken will. Also erstmal nach der Installation darein und eventuell die Datenbank auf eine Netzlaufwerk verlagern.

Dann die NetConf.ini mit Admin Rechten bearbeiten und fertig. Gut ist soweit OK. Kann ich mit leben und ich denke der Kunde auch. Aber warum habe ich das Problem trotz Admin Rechte. Seltsamer weiße hat es jetzt gerade mal funktioniert. Ich kann also nicht genau definieren, wann ich die Datei ändern kann und wann nicht.

Irgendeine Idee wo ich in den Vista Einstellungen noch suchen kann.

Gruß Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.

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 by Thomas Breitkreuz