ich beisse mir daran irgendwie die Zähne aus.
Ich möchte eigentlich nur eine Direktory erstellen und voller Lese und
Schreibzugriff darauf erlauben.
Application,LocalUserAppDatapath erstellt macht Ihn leider immer
schreibgeschützt.
Wie ändere ich die Rechte ???
Danke für jeden Tipp
Grüße Ingo
> ich beisse mir daran irgendwie die Zähne aus.
> Ich möchte eigentlich nur eine Direktory erstellen und voller Lese und
> Schreibzugriff darauf erlauben.
> Application,LocalUserAppDatapath erstellt macht Ihn leider immer
> schreibgeschützt. Wie ändere ich die Rechte ???
Also, das hat so direkt nichts mit Rechten zu tun.
Zunächst könnte ich mir vorstellen, dass Du Dich (wie auch andere) von der
Explorer-Anzeige täuschen lässt, da dort bei Schreibschutz normal eine
"ausgefüllte" CheckBox befindet, aber standardmässig legt
Directory.Create(path)" das Verzeichnis *nicht* schreibgeschützt an. Du
brauchst also eigentlich gar nichts weiteres machen.
[Die Attribute "Schreibgeschützt" oder "System" von Ordnern können nicht
eingesehen oder geändert werden]
http://support.microsoft.com/kb/326549/de
Den Schreibschutz eines Verzeichnisses oder einer Datei könntest Du aber
folgendermassen ändern, oder abfragen, wenn es denn doch nötig sein sollte:
string path = Path.Combine(Application.
LocalUserAppDataPath, "Mein Ordner");
FileInfo fi = new FileInfo(path);
fi.IsReadOnly = false; // nicht schreibgeschützt
Oder z.B. über Kommandzeile mit: attrib -r "[Verzeichnispfad]"
nebst Bedeutungen: attrib /?
> Wie ändere ich die Rechte
Gut, falls Du es doch irgendwie benötigst:
Zunächst, die Sicherheit kann nur auf einer Partition gesetzt werden, die
das NTFS-Dateisystem verwendet.
Hier ein Beispiel, wie man Zugriffs-Beschränkungen oder Erlaubnisse auf
Verzeichnisse programmatisch erteilen kann:
private void Form1_Load(object sender, EventArgs e)
{
string path = Path.Combine(Application.
LocalUserAppDataPath, "Mein Ordner");
// string path = @"C:\Mein Ordner";
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
if (!Directory.Exists(path))
{
MessageBox.Show("Verzeichnis '" + path +
"' konnte nicht angelegt werden!");
return;
}
ZeigeBerechtigungen("[Vorher]", path);
DirectoryInfo di = new DirectoryInfo(path);
DirectorySecurity ds = di.GetAccessControl(AccessControlSections.Owner);
// ds.SetOwner(new NTAccount(Environment.UserDomainName,
// "Frank Dzaebel"));
ds.AddAccessRule(new FileSystemAccessRule("Gast",
FileSystemRights.ReadData, AccessControlType.Allow));
ds.AddAccessRule(new FileSystemAccessRule("Gast",
FileSystemRights.WriteData, AccessControlType.Deny));
di.SetAccessControl(ds);
ZeigeBerechtigungen("[Nachher]", path);
}
private void ZeigeBerechtigungen(string titel, string path)
{
DirectoryInfo dinfo = new DirectoryInfo(path);
// Für Vista: Der Prozess benötigt die SeSecurityPrivilege-Berechtigung.
// Starten Sie Visual Studio für Debug-Zwecke z.B. als Administrator.
DirectorySecurity dsec =
dinfo.GetAccessControl(AccessControlSections.All);
AuthorizationRuleCollection rules =
dsec.GetAccessRules(true, true, typeof(NTAccount));
string meldung = "";
foreach (FileSystemAccessRule rule in rules)
{
meldung += String.Format("Für \"{0}\" ist Zugriff [{1}]: {2}\r\n",
rule.IdentityReference.Value.ToString(), rule.FileSystemRights,
rule.AccessControlType == AccessControlType.Allow ?
"erlaubt!" : "verweigert.");
}
MessageBox.Show(titel + "\nRechte auf Verzeichnis:\n" + path +
"\n\n" + "Schreibgeschützt:" + new FileInfo(path).
IsReadOnly.ToString() + "\n" + meldung, "Verzeichnis-Rechte");
//MessageBox.Show("\nSDDL:\n" +
// dsec.GetSecurityDescriptorSddlForm(AccessControlSections.All));
}
ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
danke für die Hilfe. Ja ich habe mit täuschen lassen von der Anzeige des
Explores. Jetzt ist alles ok.
Grüße Ingo
"Frank Dzaebel" <Po...@FranksSeite.de> schrieb im Newsbeitrag
news:OVvFWxc0...@TK2MSFTNGP06.phx.gbl...