Entwickler-Ecke

Dateizugriff - Fehler beim Speichern / Windows 7 / UAC


juppinger - Mi 05.01.11 15:29
Titel: Fehler beim Speichern / Windows 7 / UAC
Hi zusammen,

WIN 7 Problem:

ich habe ein Programm, welches Dateien anlegt, ändert und löscht im eigenen Verzeichnis.
I.d.R. wird das Programm installiert (setup.exe) nach "c:\program files\name".

Wenn ich das Programm nun per Win7 mit mehreren Usern betreibe, werden die Änderungen (anlegen, speichern,...) , die das Programm durchführt, nicht im o.g. Order [ ExtractFilePath(Application.ExeName ], sondern unter
c:\users\<angemeldeter user>\appdata\local\virtualstore\...
durchgeführt. Vorsicht: ordner ist versteckt.
...liegt meine exe nun im eigenen verzeichnis eine datei an, wird diese nicht wirklich dort, sondern eben in dem user-verzeichnis gespeichert und ist auch nur für mich / user nutzbar.

Das hat wohl zu tun mit "UAC" bzw. Benutzerkontensteuerung in Windows 7.

So wie ich das verstanden habe, wird dies nur für "geschützte" Ordner, wie bsp. c:\program files in windows 7 so gehandhabt mit den Dateien.-Soll wohl die Sicherheit erhöhen.

Da die untersch. Benutzer jedoch auch auf die dateien anderer benutzer der software zugreifen sollen, habe ich somit ein problem.

1. Genügt es, die Software nicht per setup.exe in c:\program files\... zu installieren, sondern z.B. in c:\abc? Wird dann dieses UAC somit nicht durchgeführt für dieses Verzeichnis?

2. Gibt es noch andere Möglichkeiten, dass ich die Dateien "wirklich" dort speichern kann? vermutlich nicht, außer ich wäre admin, oder?

1000 dank im voraus.

grüße,
jup


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mi 05.01.2011 um 18:07


Martok - Mi 05.01.11 16:43

user profile iconjuppinger hat folgendes geschrieben Zum zitierten Posting springen:
1. Genügt es, die Software nicht per setup.exe in c:\program files\... zu installieren, sondern z.B. in c:\abc? Wird dann dieses UAC somit nicht durchgeführt für dieses Verzeichnis?

Ja. Das machen portable Anwendungen so.
Aber dafür wird dich (und mich auch, weil ich da sage) user profile iconjaenicke vierteilen, federn, teeren und böse angucken :D

user profile iconjuppinger hat folgendes geschrieben Zum zitierten Posting springen:
2. Gibt es noch andere Möglichkeiten, dass ich die Dateien "wirklich" dort speichern kann? vermutlich nicht, außer ich wäre admin, oder?
Die Frage sollte eher sein, wie legt man Daten für alle User zugreifbar ab - und da hat Windows das AllUsers-Anwendungsdaten-Verzeichnis für.
Aufpassen: da muss der Installer die Berechtigungen so setzen, dass deine Anwendung auch schreiben darf. Genaueres findet sich im MSDN [http://msdn.microsoft.com/en-us/library/ms995853.aspx].


jaenicke - Mi 05.01.11 17:10

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Ja. Das machen portable Anwendungen so.
Aber dafür wird dich (und mich auch, weil ich da sage) user profile iconjaenicke vierteilen, federn, teeren und böse angucken :D
Nö, dafür nicht. Portabel ist das ja ok. Das habe ich sogar in dem entsprechenden Beitrag [http://www.delphi-library.de/viewtopic.php?p=548600] in der Library geschrieben. :mrgreen: ;-)
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Eine portable Software soll natürlich in das eigene Verzeichnis schreiben, dafür ist sie da. Solche Software muss dann in einem beschreibbaren Verzeichnis (USB-Stick, Eigene Dateien, ...) liegen. [...]
Und da steht ja auch alles weitere.


Tranx - Mi 05.01.11 17:31

Wenn Du globale Dateien ändern willst, also Dateien, welche von allen Nutzern gleichermaßen eingesehen udn geändert weren sollen, dann wäre in meinen Augen ein festes Verzeichnis außerhalb der "Eigenen Dateien" angebracht. Z.B. C:\Daten oder gar im Netzwerk. Dies würde ich dann in dem Programm als Option aus einer Ini-Datei auslesen. Aber das geht sicher viel besser. ;)


Martok - Mi 05.01.11 18:21

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Ja. Das machen portable Anwendungen so.
Aber dafür wird dich (und mich auch, weil ich da sage) user profile iconjaenicke vierteilen, federn, teeren und böse angucken :D
Nö, dafür nicht. Portabel ist das ja ok.
Das sagst du jetzt nur, um mich zu ärgern, oder? :mrgreen:

Das lustige ist ja, den Teil mit den portablen Anwendungen erst nachträglich ergänzt hab... ursprünglich stand da nur "Ja."

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
ein festes Verzeichnis außerhalb der "Eigenen Dateien" angebracht. Z.B. C:\Daten oder gar im Netzwerk.
Auch eine gute Idee. Hat den Vorteil, dass man nicht im Windows-Profilordner rummüllen muss, und es einfacher zu finden ist.

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Dies würde ich dann in dem Programm als Option aus einer Ini-Datei auslesen. Aber das geht sicher viel besser. ;)
Irgendwo konfigurierbar sollte es auf jeden Fall sein, ja.


Delete - Mi 05.01.11 18:51

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
ein festes Verzeichnis außerhalb der "Eigenen Dateien" angebracht. Z.B. C:\Daten oder gar im Netzwerk.
Auch eine gute Idee. Hat den Vorteil, dass man nicht im Windows-Profilordner rummüllen muss, und es einfacher zu finden ist.

Dafür würde ich ihn dann vierteilen, federn, teeren und böse angucken. Konfigurationsdaten gehören nicht in die Eigenen Dateien oder in einen eignen Ordner im Wurzelverzeichnis der Windowsinstallation! Canon macht das mit dem Drucktreiber meines Druckers und ich könnte da jedes mal ausrasten, wenn ich das sehe. Wie schon gesagt, gehört das nach AllUsers oder wie das Verzeichnis heißt. Da man sich den Pfad des Ordner mit einer Windowsfunktion einfach holen kann, spricht auch nichts dagegen, es dort abzuspeichern.


elundril - Mi 05.01.11 18:54

Gibts nicht eigentlich auch einen Ordner unter der System-Platte wie All-Users, in dem es auch einen App-Data Ordner gibt in dem man sachen speichern kann? Dadurch wäre er für jeden benutzer gleich und Sebastian muss niemandem Gewalt antun?

lg elundril


jaenicke - Mi 05.01.11 19:05

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
Gibts nicht eigentlich auch einen Ordner unter der System-Platte wie All-Users, in dem es auch einen App-Data Ordner gibt in dem man sachen speichern kann?
Ja, aber leider nicht so wie es manche gern hätten. Um zu verhindern, dass jemand jemandes anderen Daten überschreibt, hat AFAIR nur der Ersteller volle Rechte in dem Ordner. Genau muss ich es noch einmal nachschauen wie das war, zumindest unter manchen Systemen war das so.

Ich habe ja einen Mechanismus beschrieben wie man es dem Benutzer überlassen kann, wo die Daten konkret liegen. Ob im eigenen Ordner oder in den Anwendungsdaten, ... steht ja alles unter dem Link drin, inklusive konkreter Implementierung.

Wer möchte kann natürlich noch die Möglichkeit eines Verweises auf ein ganz anderes Verzeichnis hinzufügen, dann wohl am besten mit einer entsprechenden Verweis-Konfigurationsdatei in den Anwendungsdaten. Dann sollte wirklich alles erschlagen sein.

Ich finde an der Lösung vor allem am besten, dass die portabel wie installiert funktioniert. Und man die auch vom Stick starten kann ohne eine installierte Version zu stören. Und so weiter.


Delete - Mi 05.01.11 20:39

Es gibt unter WIN 7 z.B. X:\Users\Public\ und X:\Users\Public\Documents und x:\Users\Public\Beliebiger Name.
Darauf kann man sogar mit WIN XP zugreifen.

X = Beliebiger Drivename, vorzugsweise WIN 7 - Partition.


Delete - Mi 05.01.11 22:08

Und unter XP gibt es C:\Dokumente und Einstellungen\All Users\Anwendungsdaten. Und da gehören globale Konfigurationsdaten hin in ein Verzeichnis mit dem Anwendungsnamen. Also C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\MeineAnwendung.