Laden...

Installation: Veränderbare Daten wohin?

Erstellt von Floschi vor 12 Jahren Letzter Beitrag vor 11 Jahren 5.551 Views
Floschi Themenstarter:in
193 Beiträge seit 2007
vor 12 Jahren
Installation: Veränderbare Daten wohin?

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?

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
1.820 Beiträge seit 2005
vor 12 Jahren

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 🙁

G
538 Beiträge seit 2008
vor 12 Jahren

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)

49.485 Beiträge seit 2005
vor 12 Jahren

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

1.820 Beiträge seit 2005
vor 12 Jahren

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 🙁

G
538 Beiträge seit 2008
vor 12 Jahren

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)

W
955 Beiträge seit 2010
vor 12 Jahren

Hi,

IsolatedStorage wäre auch eine Möglichkeit

1.130 Beiträge seit 2007
vor 12 Jahren

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.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

Floschi Themenstarter:in
193 Beiträge seit 2007
vor 12 Jahren

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.

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
49.485 Beiträge seit 2005
vor 12 Jahren

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

G
538 Beiträge seit 2008
vor 12 Jahren

Hier ist im übrigen mal eine genaue Beschreibung, welcher Ordner welchen Zweck erfüllt:

SpecialFolders Enumeration

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)

Floschi Themenstarter:in
193 Beiträge seit 2007
vor 12 Jahren

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.

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
G
538 Beiträge seit 2008
vor 12 Jahren

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)

Floschi Themenstarter:in
193 Beiträge seit 2007
vor 12 Jahren

Ich habe das problem bei Vista bemerkt, vielleicht ist da die Benutzerkontensteuerung etwas rigoroser?

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
B
48 Beiträge seit 2010
vor 12 Jahren

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.

G
538 Beiträge seit 2008
vor 12 Jahren

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)

1.130 Beiträge seit 2007
vor 12 Jahren

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.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

1.820 Beiträge seit 2005
vor 12 Jahren

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 🙁

P
148 Beiträge seit 2007
vor 11 Jahren

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

F
10.010 Beiträge seit 2004
vor 11 Jahren

Das Problem ist, das keiner bis zu ende liest wenn es um die Berechtigungen geht.

  1. Als Ersteller eines Verzeichnisses unter CommonApplicationData kannst du dadrin veranstalten was du möchtest.
  2. Das gilt aber nur für den ersteller.
  3. Musst du nach dem erstellen selber Berechtigungen vergeben, wenn es alle sein sollen dann:

        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);
        }

P
148 Beiträge seit 2007
vor 11 Jahren

Hi FZelle

genau das war es, besten Dank

Gruss
Pioneer17