Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Installation: Veränderbare Daten wohin?
Floschi
myCSharp.de - Member

Avatar #avatar-2723.png


Dabei seit:
Beiträge: 193

Themenstarter:

Installation: Veränderbare Daten wohin?

beantworten | zitieren | melden

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?
If debugging is the process of removing bugs, then programming must be the process of putting them in.
Dijkstra
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 538
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 538
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

Deshalb hat ein Setup ja auch meistens vorneweg eine Abfrage, ob es Admin-Rechte bekommt ;)
CommonApplicationData hat glaube ich aber keine Beschränkung ...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Grumbler85 am .
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)
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 955

beantworten | zitieren | melden

Hi,

IsolatedStorage wäre auch eine Möglichkeit
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1.130
Herkunft: Norddeutschland

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Floste am .
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
Floschi
myCSharp.de - Member

Avatar #avatar-2723.png


Dabei seit:
Beiträge: 193

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Floschi am .
If debugging is the process of removing bugs, then programming must be the process of putting them in.
Dijkstra
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 538
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Grumbler85 am .
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)
private Nachricht | Beiträge des Benutzers
Floschi
myCSharp.de - Member

Avatar #avatar-2723.png


Dabei seit:
Beiträge: 193

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Floschi am .
If debugging is the process of removing bugs, then programming must be the process of putting them in.
Dijkstra
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 538
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

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 ...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Grumbler85 am .
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)
private Nachricht | Beiträge des Benutzers
Floschi
myCSharp.de - Member

Avatar #avatar-2723.png


Dabei seit:
Beiträge: 193

Themenstarter:

beantworten | zitieren | melden

Ich habe das problem bei Vista bemerkt, vielleicht ist da die Benutzerkontensteuerung etwas rigoroser?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Floschi am .
If debugging is the process of removing bugs, then programming must be the process of putting them in.
Dijkstra
private Nachricht | Beiträge des Benutzers
bSharp
myCSharp.de - Member



Dabei seit:
Beiträge: 48

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 538
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1.130
Herkunft: Norddeutschland

beantworten | zitieren | melden

Zitat
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!
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Pioneer17
myCSharp.de - Member



Dabei seit:
Beiträge: 148
Herkunft: Schweiz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.972

beantworten | zitieren | melden

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);
        }
private Nachricht | Beiträge des Benutzers
Pioneer17
myCSharp.de - Member



Dabei seit:
Beiträge: 148
Herkunft: Schweiz

beantworten | zitieren | melden

Hi FZelle

genau das war es, besten Dank

Gruss
Pioneer17
private Nachricht | Beiträge des Benutzers