C# Ordnerrechte setzen

flugser

Cadet 4th Year
Registriert
Apr. 2008
Beiträge
75
Folgendes Problem:
Ich möchte die Rechte eines kopierten Ordners ändern, welcher zuvor im Netzwerk von einem Rechner auf den Anderen kopiert wurde.
Folgenden Ansatz hab ich bis jetzt verfolgt:

1. Ansatz: Mit einer Prozedur mittels „Batch“ die Rechte ändern:
cacls "M:\eurouser" /T /P benutzerA":f benutzerB:n benutzerC:f
( Laufwerk M: wurde gemountet, benutzerA und benutzerB bekommen Vollzugriff und benutzerB gar keine Rechte)

Wenn der Befehl lokal ausgeführt wird, ist das kein Problem. Wenn er jedoch vom entfernten Rechner (RechnerB) auf das gemountete Laufwerk ausgeführt wird, werden jedoch die Rechte von RechnerA auf den Ordner gesetzt. Problemlösung mit z.B. „RechnerB/benutzerA:f“ funktionierte leider nicht. Fehler: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt. (Denke mir die Sicherheit von NTFS lässt dies nicht zu)

2. Ansatz: Direkt mit C#
Code:
private void SetSec(string fld)
{
	try
	{
		DirectoryInfo di = new DirectoryInfo(fld);
		DirectorySecurity ds = di.GetAccessControl(AccessControlSections.Owner);
		ds.SetOwner(new NTAccount(Environment.UserDomainName, "benutzerA"));
		ds.AddAccessRule(new FileSystemAccessRule("benutzerB",
		FileSystemRights.WriteData, AccessControlType.Deny));
			ds.AddAccessRule(new FileSystemAccessRule("benutzerC",
		FileSystemRights.WriteData, AccessControlType.Allow));
		di.SetAccessControl(ds);
	}
	catch
	{}
}
Schmeißt leider eine Exception ,funktioniert deshalb leider auch nicht :(

Noch paar Infos zum Netzwerk: Alle Rechner (PC-Pool mit 27 Rechnern) sind Windows-XP-Clients mit SP3 und gehören keiner Domäne an (soll auch nicht geändert werden).

Hat jemand ne Idee wie man das Problem lösen kann oder paar Hinweise zur Lösung?
 
Ich wusste ich hab was vergessen :D

Hier die Exception:

System.InvalidOperationException: Unerwarteter Methodenfehler 3.
bei System.Security.AccessControl.NativeObjectSecurity.CreateInternal(ResourceType resourceType, Boolean isContainer, String name, SafeHandle handle, AccessControlSections includeSections, Boolean createByName, ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)
bei System.Security.AccessControl.FileSystemSecurity..ctor(Boolean isContainer, String name, AccessControlSections includeSections, Boolean isDirectory)
bei System.Security.AccessControl.DirectorySecurity..ctor(String name, AccessControlSections includeSections)
bei System.IO.DirectoryInfo.GetAccessControl(AccessControlSections includeSections)
bei EuroTestTool.CopyDel.SetSecur(String fld) in ...Zeile 74.

Zeile 74: DirectorySecurity ds = di.GetAccessControl(AccessControlSections.Owner);
 
Hier mal paar Anregungen zum Testen:

1. Was passiert, wenn du den Code für ein lokales Verzeichnis ausführst? Gleiche Exception?
2. Was passiert, wenn du
Code:
DirectorySecurity ds = di.GetAccessControl(AccessControlSections.Owner);
durch
Code:
DirectorySecurity ds = di.GetAccessControl();
ersetzt?
 
Zurück
Oben