Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Vista: Wohin mit "AllUsers"-Dateien? (https://www.delphipraxis.net/138941-vista-wohin-mit-allusers-dateien.html)

Angel4585 20. Aug 2009 09:49


Vista: Wohin mit "AllUsers"-Dateien?
 
Hallo,

unser Programm pflegt eine XML Datei in welcher Daten für alle Benutzer verwaltet werden.
Diese Datei lag bis XP in C:\Dokumente und Einstellungen\AllUsers\Anwendungsdaten.
Seit Vista ist das C:\ProgramData.
Da nun jeder User dort auch reinschreiben muss, tritt ab Vista ein Problem auf:

User A kann die Datei anlegen un hat vollen Zugriff drauf. User B hat allerdings nur Lesen&Ausführen weshalb es beim Schreiben natürlich zu Problemen kommt.

Es muss doch einen Ort geben, wo man so eine Datei abgelegt werden kann und Jeder Vollzugriff drauf hat, oder? Welcher Ordner ist das seit Vista?

Ich möchte unsere User eigentlich nicht mit Kontextmenü -> Als Admin starten nerven.
Per Manifest als Admin starten ist auch ungeschickt, da das gleiche Programm aus einem Dienst heraus parametrisiert aufgerufen wird, wenn dort die Meldung kommt und keiner die sieht hängt das Programm ewig im Nirvana rum.

Habt Ihr ne Idee wo ich die Datei am besten hinmachen kann? :gruebel:

himitsu 20. Aug 2009 09:53

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
Was liefert denn GetSpecialFolder(CSIDL_COMMON_APPDATA) für einen Pfad?
Dieser ist ja angeblich genau für sowas da.

[add]
Aber eventuell/notfalls kannst du dir ja wärend des Setups (mit Adminrechten) einen Unterordner in C:\ProgramData anlegen, wo du dann allen Usern Schreibrechte einräumst?

Angel4585 20. Aug 2009 10:07

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
GetSpecialFolder(CSIDL_COMMON_APPDATA) liefert mir "C:\ProgramData", darüber wird auch der Pfad zur Datei generiert. Was ist wenn ein normaler User die Installation vornimmt, dann kann ich doch nich bei der Installation die Rechte für jeden setzen?

jaenicke 20. Aug 2009 10:09

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
Es gibt keinen solchen Ordner. Jeder Benutzer hat normalerweise eine eigene Datei. Die kann ja jeder auslesen, man kann also Daten problemlos zwischen den Dateien der verschiedenen Benutzer austauschen. Aber man kann eben keinem anderen Benutzer seine Datei direkt kaputtmachen.

Eine Software kann z.B. beim Start fragen, ob Änderungen anderer Benutzer importiert werden sollen.

Ansonsten müssen tatsächlich die Ordnerrechte des Unterordners in den Anwendungsdaten aller Benutzer entsprechend verändert werden. Allerdings müsste es dafür schon gute Gründe geben. Ich persönlich hätte jetzt keinerlei Ideen für eine Software wo man das nicht auch sauber lösen könnte. :gruebel:
Heißt: Es müssen die Rechte für die Gruppe Benutzer entsprechend gesetzt werden.

// EDIT:
Zitat:

Zitat von Angel4585
Was ist wenn ein normaler User die Installation vornimmt, dann kann ich doch nich bei der Installation die Rechte für jeden setzen?

Wie bitte? Normaler Benutzer? Installation? :wall:

himitsu 20. Aug 2009 10:10

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
Zitat:

Zitat von Angel4585
GetSpecialFolder(CSIDL_COMMON_APPDATA) liefert mir "C:\ProgramData", darüber wird auch der Pfad zur Datei generiert.

witzig nur, daß CSIDL_COMMON_APPDATA ja angeblich genau dafür gedacht ist, da hätt ich dann auch erwartet, daß alle da zugriff haben :gruebel:

Zitat:

Zitat von Angel4585
Was ist wenn ein normaler User die Installation vornimmt, ...

ja, dann geht das nicht so ... dann mußte das Setup mit Adminrechten versehen, welche du doch eh benötigst, um dein Programm in den Programmordner reinzubekommen.

jaenicke 20. Aug 2009 10:11

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
Zitat:

Zitat von himitsu
witzig nur, daß CSIDL_COMMON_APPDATA ja angeblich genau dafür gedacht ist, da hätt ich dann auch erwartet, daß alle da zugriff haben :gruebel:

Darauf haben auch alle Zugriff, aber auf fremde Dateien nur lesenden. Und das ist auch gut so...

Angel4585 20. Aug 2009 10:16

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
Naja der Dienst braucht nunmal ne Datei die er unabhängig vom Benutzer verwalten kann, wo aber die Benutzer auch drauf zugreifen können. In der Datei werden ständig Änderungen vorgenommen und nicht einmalig Einstellungen die man importiert und ab da dann selbst weiterarbeitet.

@himi: ich guck mal ob das während dem Setup geht, guter Tipp!

TurboMartin 20. Aug 2009 13:19

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
Ich würde sagen, entsprechendes ist C:\Users\Default\AppData und entsprechendem Unterordner.

Apollonius 20. Aug 2009 15:04

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
Man braucht keine Adminrechte, um die Rechte eines selbsterstellten Ordners oder einer Datei zu ändern. Wenn einem das Objekt gehört, kann man auch anderen den Zugriff erlauben. Ob man das tun sollte, ist eine andere Frage. Man muss dann nämlich höllisch aufpassen, dass ein eingeschränkter Benutzer einem Admin keine Daten unterjubeln kann, die dein Programm Amok laufen lassen.

Angel4585 31. Aug 2009 11:46

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
Also das mit den Rechten vergeben im Setup war der richtige Tip.

Ab Vista sind die Ordner unter C:\ProgramData\
Davor unter C:\Dokumente und Einstellungen\AllUsers\Anwendungsdaten\

himitsu 31. Aug 2009 11:58

Re: Vista: Wohin mit "AllUsers"-Dateien?
 
Ich hab inzwischen auch etwas an diesem Thema gearbeitet und bin auf eine andere Lösung gekommen, welche die Meinung von jaenicke berücksichtigt.

Zitat:

Zitat von jaenicke
Zitat:

Zitat von himitsu
witzig nur, daß CSIDL_COMMON_APPDATA ja angeblich genau dafür gedacht ist, da hätt ich dann auch erwartet, daß alle da zugriff haben :gruebel:

Darauf haben auch alle Zugriff, aber auf fremde Dateien nur lesenden. Und das ist auch gut so...

Aus diesem Grunde wurde der Pfad für meine Optionsdatei (via himXML_Tools.TXMLProjectOptions)
geändert, wenn dieses Verzeichnis gewählt wird.
Die Datei bekommt dann noch die UserSID verpaßt, so daß in dem Verzeichnis jeder Benutzer seine eigene Datei besitzt, auf welche nur er schreibenden Zugriff hat.
(wollte erst den Usernamen nehmen, weil mir dieses übersichtlicher erschien, aber es wäre blöd, wenn sich mal einer umbenennt)

Dazu wurde neue Funktionen bereitgestellt.

> GetOptionfiles gibt eine Liste der Dateien von anderen Benutzern wieder, wo man sich dann "manuell" einen Dateinamen auswählen und der nächsten Funktion übergeben könnte.
Oder man läßt dort den Dateiparameter leer und diese Funktion wählt dann die aktuellste Version aus.

> UpdateShareddata kann man je einen XML-Pfad angeben, welcher von dem gewählten User übernommen werden soll.
(ist bei der automatischen Auswahl die eigene Datei neuer, wird nix kopiert)

Dieser Pfad wird dann in die eigenen Optionen reingeklont
und man hätte vorher noch die Möglichkeit die Fremd-Daten zu prüfen.


Jeder hat also weiterhin seine eigenen Daten,
keiner kann diese verändern (da andere nur Lesezugriff haben)
und dennoch kann man Teile der Daten sharen/übernehmen.


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