AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi INI-Datei von windows nach ProgramData verschieben.

INI-Datei von windows nach ProgramData verschieben.

Ein Thema von bernau · begonnen am 30. Nov 2015 · letzter Beitrag vom 1. Dez 2015
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.307 Beiträge
 
Delphi 12 Athens
 
#1

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 30. Nov 2015, 17:18
Tja. Das war für mich mal wieder ein Griff in den Lokus.

Ich habe folgendes aus dem Dokwiki für die Funktion System.IOUtils.TPath.GetPublicPath

Zitat:
Returns the path to the directory where you can store application data that can be shared with other applications.
Note: In desktop applications, "shared" means "shared between different users". In mobile applications, "shared" means "shared between different applications".
Als Ergebnis bekomme ich den Pfad c:\ProgramData

Das bedeutet für mich, ich habe einen zentralen Punkt, in dem ich Programmeinstellungen speichere. Ich möchte es so haben, daß gewisse Einstellungen von jedem Benutzer geschrieben werden können. Wäre also der richtige Ort. Habe ich gedacht.......

Habe jetzt mal etwas gespielt und einen neuen Benutzer in Windows angelegt. Das Programm hatte ich vorher schon unter meinem Standardbenutzer gestartet und somit schon eine INI-Datei nach c:\ProgramData\blibblab geschrieben. Mit dem neuen Benutzer kann ich zwar lesen, habe aber keine Schreibberechtigung auf diese Datei, die mit dem gleichen Programm, aber unter einem anderen Benutzer geschrieben wurde. Habe ich wohl falsch gedacht.

Ich welches Verzeichnis kann jedes Programm schreiben, ohne daß ich auf den angemeldeten Benutzer Rücksicht nehmen muss?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#2

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 30. Nov 2015, 17:32
Ich kann jetzt die Quelle nicht mehr nennen, aber ich meine, ein App-spezifisches Unterverzeichnis von ProgramData ist genau der richtige Ort. Dieser sollte allerdings vom Setup-Programm angelegt und mit den erforderlichen Rechten versehen werden. Bei mir ist das schon ein Standard-Schnipsel im InnoSetup-Skript.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.436 Beiträge
 
Delphi 12 Athens
 
#3

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 30. Nov 2015, 17:38
@Uwe
Zitat:
Bei mir ist das schon ein Standard-Schnipsel im InnoSetup-Skript.
...just stehe ich auch vor diesem Problem. Kannst du mir das Denken erleichtern und den Schnipsel veröffentlichen? Ich muß beim Inno schon genug wieder neu lernen...

Danke
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.307 Beiträge
 
Delphi 12 Athens
 
#4

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 30. Nov 2015, 17:43
@Uwe
Zitat:
Bei mir ist das schon ein Standard-Schnipsel im InnoSetup-Skript.
...just stehe ich auch vor diesem Problem. Kannst du mir das Denken erleichtern und den Schnipsel veröffentlichen? Ich muß beim Inno schon genug wieder neu lernen...

Danke
Ähhmmm. Mir auch.

Oder einfach den Schnipse hier anhängen.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#5

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 30. Nov 2015, 18:57
Oder einfach den Schnipse hier anhängen.
Kein Problem. Die beiden Dirs-Einträge sorgen für die Schreibrechte, während der Code für die synchrone Namensgebung der Verzeichnisse zuständig ist. Die Vorgabe des Zielverzeichnisses ist bei meinen Setups nicht änderbar, deswegen funktioniert hier das ersetzen von {pf} in {commondocs} bzw. {commonappdata} auch problemlos. Bei wahlfreien Zielverzeichnissen kann man den Code aber auch entsprechend anpassen und die jeweiligen Subpfade direkt hinschreiben oder aus anderen Quellen zusammensetzen.

Delphi-Quellcode:
[Dirs]
Name: {code:AppDataFolder}\; Permissions: users-modify
Name: {code:DataFolder}\; Permissions: users-modify
und

Delphi-Quellcode:
[Code]
function DataFolder(Param: String): String;
begin
  result := WizardDirValue;
  StringChangeEx(result, ExpandConstant('{pf}'), ExpandConstant('{commondocs}'), true);
end;

function AppDataFolder(Param: String): String;
begin
  result := WizardDirValue;
  StringChangeEx(result, ExpandConstant('{pf}'), ExpandConstant('{commonappdata}'), true);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 30. Nov 2015, 19:10
In C:\Users\All Users überschreiben sich die Benutzer aber gegenseitig ihre Einstellungen. Meiner meinung nach gehören Einstellungen entweder in die Registry in den Benutzerspezifischen Zwig oder als Datei nach C:\Users\[Benutzername]\AppData\Roaming\[Programmname]
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 30. Nov 2015, 20:51
In C:\Users\All Users überschreiben sich die Benutzer aber gegenseitig ihre Einstellungen. Meiner meinung nach gehören Einstellungen entweder in die Registry in den Benutzerspezifischen Zwig oder als Datei nach C:\Users\[Benutzername]\AppData\Roaming\[Programmname]
Sehe ich auch so. Das war aber nicht die Frage, auf die ich geantwortet hatte, denn die lautete: In welches Verzeichnis kann jedes Programm schreiben, ohne daß ich auf den angemeldeten Benutzer Rücksicht nehmen muss?

Handelt es sich um Multiuser-Datenbank-Clients – Programme also, die ihr Zeugs in einer Datenbank ablegen und am selben Rechner mehrere Benutzer zu verwalten haben oder von mehreren Rechnern aus auf einen DB-Server zugreifen –, ziehe ich es mittlerweile vor, auch die benutzerspezifischen Daten in der jeweiligen Datenbank (bei mir fast ausnahmslos Firebird) zu verwalten. Das hat zum einen den Vorteil, daß diese Programmeinstellungen und Benutzerdaten nicht verloren gehen, wenn man auf einen anderen Rechner umziehen muß, und zum anderen, daß alle Benutzer entsprechende Schreib- und Leserechte in der Datenbank besitzen. Man kann dann immer noch trusted connection, wie man sie vom SQL-Server kennt, einsetzen, um dem Benutzer die zweite Anmeldung in der Anwendung zu ersparen. Damit dann jeder Benutzer seine eigenen Einstellungen ohne Einschränkungen und über Betriebssystemgrenzen hinweg parat, selbst bei einer Portierung der Anwendung z.B. auf Linux oder Mac-OS, weil man dann noch immer dieselbe Datenbank verwenden kann, wenn man ein entsprechendes DBMS verwendet, das auch für andere OS' verfügbar ist.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#8

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 30. Nov 2015, 21:12
In C:\Users\All Users überschreiben sich die Benutzer aber gegenseitig ihre Einstellungen. Meiner meinung nach gehören Einstellungen entweder in die Registry in den Benutzerspezifischen Zwig oder als Datei nach C:\Users\[Benutzername]\AppData\Roaming\[Programmname]
Das war aber gar nicht gefragt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.307 Beiträge
 
Delphi 12 Athens
 
#9

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 30. Nov 2015, 21:14
In C:\Users\All Users überschreiben sich die Benutzer aber gegenseitig ihre Einstellungen. Meiner meinung nach gehören Einstellungen entweder in die Registry in den Benutzerspezifischen Zwig oder als Datei nach C:\Users\[Benutzername]\AppData\Roaming\[Programmname]
Es gibt doch auch Daten, Parameter oder Sonstiges, die nicht benutzerspezifisch sind, sondern die nur für die Lauffähigkeit des Programms notwendig sind, egal welcher Benutzer grade angemeldet ist. Die gehören m.M. nach in das Verzeichnis c:\Programdata\xxx und dort muss dann das "Programm" schreiben können.

Beispiel: Eine Lizensdatei, welche alle 7 Tage aktualisiert wird. Egal welcher Benutzer angemeldet ist. Die Datei muss vom Programm geschrieben werden können.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: INI-Datei von windows nach ProgramData verschieben.

  Alt 1. Dez 2015, 07:34
In C:\Users\All Users überschreiben sich die Benutzer aber gegenseitig ihre Einstellungen.
Das kann ja auch beabsichtigt sein!
Ebenso spricht nichts dagegen mit zwei Dateien zu arbeiten, einer für alle Benutzer {allUsers} und einer für die spezifischen Einstellungen {benutzer}.

Was den Gebrauch der Registry angeht, ist ODBC ein schönes Beispiel für System/Benutzer-Einstellungen.

Zugriffsrechte Beispiel:
C:\ProgramData\MyProgram\MyProgram.ini
Zugriff: System, Administratoren,
d.h. das Programm, das das File erstellt hat UND Administratoren haben Vollzugriff, andere haben NUR Lesezugriff.
Ggf. hilft hier ein Blick in die Dateieigenschaften->Sicherheit, da u.U. der Admin da etwas "gedreht" hat. Für den Normalbetrieb ist der Vollzugriff nicht nötig, da reicht Schreibend und Lesend.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 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-2025 by Thomas Breitkreuz