Hallo,
ich hab ein Setup Projekt und brauche ein Verzeichnis, auf das alle Benutzer zugreifen können und dort auch schreiben dürfen
Hab schon
Environment.SpecialFolder.CommonApplicationData
Environment.SpecialFolder.CommonProgramFiles
ausprobiert.
Die Ordner sind aber bei eingeschalteter Benutzerkontensteuerung schreibgeschützt.
Jetzt weiß ich nicht wohin mit den Daten.
Kann mit jemand helfen?
Hallo!
Das wundert mich, den genau die Ordner hätte ich auch vorgeschlagen.
Hast du das Setup den mal auf anderen PC's getestet, ob diese ebenfalls UAC-geschützt sind. Evtl. sind ja nur an deinem PC die Rechte oder die UAC anders als üblich eingestellt.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Der Ordner selbst ist auch nicht zur Ablage gedacht, wohl aber seine Unterordner, die du ohne weitere Probleme anlegen dürftest.
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Hallo Floschi,
CommonProgrammFiles ist nach meinem Verständnis eher für ausführbare Dateien, zumindest nicht für änderbare Dateien, aber mit CommonApplicationData solltest du richtig liegen. Sollten tatsächlich (NTFS-)Rechte fehlen, solltest und müsstest du die in der Setup-Routine entsprechend setzen. Wie schon von Grumbler85 gesagt, nicht für den Ordner selbst, sondern für den Unterordner für dein Programm.
herbivore
Hallo!
Wobei der Unterordner selbst ja auch erstmal angelegt werden muss, d.h. Schreibrechte benötigt man dann dennoch.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Deshalb hat ein Setup ja auch meistens vorneweg eine Abfrage, ob es Admin-Rechte bekommt 😉
CommonApplicationData hat glaube ich aber keine Beschränkung ...
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Es gibt die Möglichkeit, die Zugriffsrechte von Dateien und Verzeichnissen so zu setzten, dass alle Benutzer Schreibrechte haben. Das ist allerdings potentiell gefährlich, je nach Inhalt.
Eines meiner Spiele macht es so.
Das Framework bietet dafür Apis.
Wenn mir jetzt jemand sagen würde wie das geht wäre ich froh.
Das Problem ist immer die Benutzerkontensteuerung, die erlaubt dem programm garnichts.
Hallo Floschi,
die Rechte soll auch nicht das Programm, sondern das Setup setzen. Das muss dann eben mit Adminrechten ausgeführt werden. Ich würde vermuten, dass so ziemlich jeder Setup-Generator eine eingebaute Unterstützung hat, um Zugriffsrechte zu setzen.
Wenn nicht, musst du eine benutzerdefinierte Aktion einbauen. Wie du Zugriffsrechte mit .NET setzt, sollte im Forum, im Netz und in der Doku beschrieben sein. Stichworte: NTFS-Rechte/ACL.
herbivore
Hier ist im übrigen mal eine genaue Beschreibung, welcher Ordner welchen Zweck erfüllt:
Die Benutzerspezifischen Ordner sind natürlich nur vom Benutzer selbst zugreifbar - die kann man (sofern keine Daten vorneweg reinmüssen) gut während des Programmstarts anlegen.
Die ganzen Common Ordner sind gut geeignet aus einer Installation heraus
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Hallo zusammen,
wie ich Rechte setze das weiß ich schon, das Problem ist die UAC.
Die setzt, unabhängig von den Rechten die ich im Setup setze, die Rechte.
Sprich: Die Dateien im Unterordner von CommonApplicationData sind alle schreibgeschützt.
Und ich brauche zentral eine Stelle an der ich Daten schreiben kann, unabhängig vom Benutzer.
Hallo Floschi - also ich kann dein Problem nicht nachvollziehen, denn ich habe (mit UAC) uneingeschränkt //edit: es ist wohl was komplizierter, als "uneingeschränkt", aber dennoch fühlt es sich an wie uneingeschränkt ... lese und schreibrechte in CommonApplicationData (der in Win7 auf C:\ProgramData\ gemappt wird)
Dort kannst du ohne weiteres Ordner anlegen und verwenden.
Die Rechte lässt du am besten ganz in Ruhe, dann wird von ProgramData geerbt und die Rechte lassen alles zu, was du brauchst ...
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Ich habe das problem bei Vista bemerkt, vielleicht ist da die Benutzerkontensteuerung etwas rigoroser?
Ich kann das Problem für Windows 7 bestätigen. Im Setup muss ich die Rechte für einen Unterordner von CommonApplicationData setzten sonst hat die Anwendung keinen Schreibzugriff.
Was willst du dort eigentlich platzieren?
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
wie ich Rechte setze das weiß ich schon, das Problem ist die UAC.
Und ich brauche zentral eine Stelle an der ich Daten schreiben kann, unabhängig vom Benutzer.
Hä!?
Ich habe grade mal einen ordner mit gesetzten Rechten in "C:\Program files" erstellt.
Es geht! Ich habe keine probleme mit UAC! Einfach eine Berechtigung hinzufügen, dass "Jeder" (ohne die Anführungsstiche natürlich) auf den Ordner zugreifen kann UND dass diese Berechtigung für alle Unterelemente übernommen werden soll. Klappt wunderbar.
Hallo!
@Floste:
Genau das wäre aber der absolut falsche Ort für solche Dateien, genau dafür gibt es ja den öffentlichen Benutzerordner.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Hallo zusammen
obwohl dieser Beitrag schon etwas älter ist, bin ich momentan beim gleichen Problem. Da das Thema da nicht mehr weiter besprochen wurde, möchte ich es gerne nochmals aufnehmen.
Wo ist der richtige Ort um Daten benutzerunabhängig abzuspeichern, wo aber jeder Benutzer lesen und scheiben kann?
Wenn ich Special Folders richtig verstehe, müsse das der CommonApplicationData sein. Jedoch eben wie im Beitrag beschrieben hat ein Benutzer standardmässig keine Schreibberechtigung auf diesen Ordner (und Unterordner)
Danke für die Hilfe
Das Problem ist, das keiner bis zu ende liest wenn es um die Berechtigungen geht.
private void AllowWorldSidForDirectory(string directoryName)
{
DirectorySecurity dSecurity = Directory.GetAccessControl(directoryName);
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
dSecurity.AddAccessRule(new FileSystemAccessRule(sid, FileSystemRights.FullControl, AccessControlType.Allow));
Directory.SetAccessControl(directoryName, dSecurity);
}
private static void AllowWorldSidForFile(string fileName)
{
FileSecurity dSecurity = File.GetAccessControl(fileName);
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
dSecurity.AddAccessRule(new FileSystemAccessRule(sid, FileSystemRights.FullControl, AccessControlType.Allow));
File.SetAccessControl(fileName, dSecurity);
}
Hi FZelle
genau das war es, besten Dank
Gruss
Pioneer17