Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Windows 8.1 X64 Programmdata Schreibschutz (https://www.delphipraxis.net/180392-windows-8-1-x64-programmdata-schreibschutz.html)

hanspeter 16. Mai 2014 21:11


Windows 8.1 X64 Programmdata Schreibschutz
 
Hallo,
irgendwie habe ich einen eigenartigen Effekt.

Ich besorge mir den Datenpfad für das Programm mit
Delphi-Quellcode:
Pfad := IncludeTrailingPathDelimiter(GetShellFolder(CSIDL_COMMON_APPDATA)) + 'Daten\' + ApplicationName +'\';

Wenn ich in den Ordner schreiben möchte, ist dieser schreibgeschützt.
Den Schreibschutz kann ich im Explorer nicht zurücksetzen.

Hat wer eine Ideee, was da passiert sein könnte oder wie ich in das Verzeichnis wieder schreiben kann?

Gruß
Peter

Popov 16. Mai 2014 21:44

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Also warum du nicht in den Ordner schreiben kannst, kann ich auf die Schnelle nicht erkennen. Evtl. ist der Pfad verkehrt. Prüfe ob er wirklich korrekt ist.

Was den Schreibschutz (Attribut) von den Ordner angeht, so ist das keiner. Das ist kein Schreibschutz. Das war vielleicht mal einer, ist aber schon lange keiner mehr. Inzwischen hat das Schreibschutz Attribut (aber nur bei Ordnern) eine andere Aufgaben (bei Daten ist es aber immer noch Schreibschutz). Du kannst also die ganze Nacht klicken, ohne da etwas zu bewirken.

Sei also beruhigt, es ist nicht mit Schreibschutz Attribut versehen.

Dalai 16. Mai 2014 22:02

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Offenbar fehlen Zugriffsrechte. Kann es sein, dass du das Programm als Nutzer ausführst? Dann hast du sehr wahrscheinlich keine Schreibrechte auf das Verzeichnis (analog zu %ProgramFiles% haben dort nur Administratoren Schreibrechte). Hast du denn dafür gesorgt, dass die Rechte auf das Verzeichnis nach deinen Vorstellungen geändert werden?

MfG Dalai

hanspeter 16. Mai 2014 22:08

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Beim Versuch z.B. die Inifile zurückzuschreiben kommte die Fehlermeldung
"In c:\Programdata\... kann nicht geschrieben werden.

Öffne ich eine vorhandene Datei mit dem Texteditor und möchte diese zurückspeichern, dann kommt die Fehlermeldung "Zugriff verweiget"
Ich meine das in Programdata eigentlich immer Schreibrechte vorhanden sein sollten?

Gruß Peter

Sir Rufo 16. Mai 2014 22:18

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Nein, die benötigten Schreibrechte für den Ordner setzt du bei der Installation

Popov 16. Mai 2014 22:57

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Wie ich schon sagte, das Schreibschutz-Attribut ist es nicht.

Der andere Schreibschutz, über Zugriffsrechte, ist eine andere Sache. In der Regel ist aber bei AppData, bzw. Anwendungsdaten-Ordner der Schreibvorgang möglich. Zumindest wenn es sich um den Anwendungsdaten-Ordner das Users handelt.

CSIDL_COMMON_APPDATA ist aber der Anwendungsdaten-Ordner von All-Users, und hie rhat man nicht automatisch Schreibrechte. In der Regel hat man sie eher nicht. Ich hab zwar noch nie bewußt bei der Installation über Rechte entschieden, kann aber stimmen.

Wähle die Datei einfach aus, klicke sie mit der rechten Maustaste an, im Kontextmenü wähle Eigenschaften, im Dialogfenster wähle Register "Sicherheit" und prüfe dort ob Benutzer/Gruppe: "Benutzer", evtl. "Ersteller-Besitzer", "Jeder" oder User "Dein Benutzername" die entsprechenden Rechte haben, bzw. ob man sie ändern kann.

Sir Rufo 16. Mai 2014 23:44

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Zitat:

Zitat von Popov (Beitrag 1259112)
CSIDL_COMMON_APPDATA ist aber der Anwendungsdaten-Ordner von All-Users, und hie rhat man nicht automatisch Schreibrechte. In der Regel hat man sie eher nicht. Ich hab zwar noch nie bewußt bei der Installation über Rechte entschieden, kann aber stimmen.

Ich vermute du sprichst von der Windows-Installation ...

Ich spreche von der Installation der Anwendung, da legt man die Ordner an und stellt auch die erforderlichen Rechte ein. Ist bei den Setup-Generatoren einfach mit ein paar Klicks eingestellt ;)
InnoSetup / [Dirs] section / Permissions

BTW: Es empfiehlt sich den Ordner nach folgender Vorgabe "{CSIDL_COMMON_APPDATA}\<Organization-Name>\<Application-Name>" zu benennen, und ab dort die weiteren anwendungsspezifischen Ordner anzulegen.

"{CSIDL_COMMON_APPDATA}\Daten\<Application-Name>" ist da irgendwie nicht so schön

jaenicke 17. Mai 2014 00:28

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Ist es denn überhaupt Absicht, dass du diese Daten für alle Benutzer ablegen willst? Normalerweise braucht das ein Programm gar nicht, normalerweise ist der Ordner CSIDL_LOCAL_APPDATA viel sinnvoller. In dem hat man Schreibrechte und dieser ist nur für den aktuellen lokalen Benutzer, man stört also andere Benutzer auf dem PC auch nicht...

Popov 17. Mai 2014 01:17

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Zitat:

Zitat von Sir Rufo (Beitrag 1259113)
Ich vermute du sprichst von der Windows-Installation ...

Jajn. Eigentlich dachte ich, dass du die Installation eines Programms aus dem Standpunkt eines Nutzers/Anwenders meinst, d. h. ich als Nutzer installiere Irfanview, kann aber nicht entscheiden ob ich bestimmte Rechte haben werde.

Du dagegen meintest wohl die Installationsrountine die der Programmierer erstellt. Hier kann er einstellen ob der Nutzer die Rechte haben wird.

Sir Rufo 17. Mai 2014 01:40

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Wäre doch aber auch sinnlos den Nutzer entscheiden zu lassen welche Rechte wie wo sein müssen, denn jede Entscheidung abweichend vom Standard würde bedeuten, die Installation abzubrechen, weil das Programm sonst nicht laufen wird.

Man lässt den Nutzer ja auch nicht entscheiden, welche Dateien kopiert werden sollen.

Der wählt evtl. eine Funktion aus und die impliziert dann welche Dateien kopiert, welche Ordner benötigt und welche Rechte dort sein müssen damit die Anwendung funktioniert.

hanspeter 17. Mai 2014 07:42

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Das Programm ist eine Altlast und schon eine ganze Weile im Einsatz.
Der Fehler scheint bei mir erst seit W 8.1 aufzutreten.
Historisch bedingt, werden die Daten nicht in einer Datenbank, sondern in IniFiles abgelegt.
Ich verschiebe jetzt dieses Verzeichnis nach CSIDL_LOCAL_APPDATA und hoffe, das keiner im Netzwerk darauf zugreifen will.
In der Regel werden die Inifiles an einer Stelle erzeugt und von Clients nur ausgelesen.

Nachtrag:
Pfad := IncludeTrailingPathDelimiter(GetShellFolder(CSIDL_ COMMON_APPDATA)) + 'Daten\' + ApplicationName +'\';

'Daten\' habe ich nur hier ersetzt. Tatsächlich ist es bei mir der Firmenname des Herstellers.

Peter

Dalai 17. Mai 2014 13:33

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Noch ein Hinweis zu CSIDL_LOCAL_APPDATA vs. CSIDL_APPDATA: Letzteres Verzeichnis ist vorzuziehen, wenn die Einstellungen im Nutzerprofil liegen sollen und in einer Domäne mit servergespeicherten Profilen mit auf den Server übertragen werden sollen, d.h. die dort gespeicherten Dateien sind an jedem PC der Domäne für diesen Nutzer verfügbar. CSIDL_LOCAL_APPDATA verweist auf ein Verzeichnis, das nicht auf den Server synchronisiert wird, d.h. die dort gespeicherten Dateien sind nur auf diesem einen PC.

Was ich damit sagen will: CSIDL_LOCAL_APPDATA sollte man wirklich nur bei Notwendigkeit (große Dateien/Datenbanken oder so) und dann bewusst benutzen. CSIDL_APPDATA ist eigentlich immer besser, weil man es Administratoren in Domänen sonst unnötig schwer macht.

MfG Dalai

Sir Rufo 17. Mai 2014 13:43

AW: Windows 8.1 X64 Programmdata Schreibschutz
 
Generell könnte man auch sagen:

FolderVerwendung
CSIDL_APPDATAAnwendungs-Daten für den Benutzer
CSIDL_LOCAL_APPDATAAnwendungs-Daten für den Benutzer an diesem Computer
CSIDL_COMMON_APPDATAAnwendungs-Daten für den Computer


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