Zugriff auf Ordner verweigert

476
GREEN FIRETRUCK

Ich hatte dieses Problem bereits, aber ich kann es immer beheben, indem Sie auf der Registerkarte "Sicherheit" in "Eigenschaften" und dann "Erweitert" klicken und schließlich der Zugriffsberechtigungsliste "Admin" hinzufügen. In diesem Fall habe ich jedoch eine Windows Forms-App, in der ich diesen Code verwende:

FileStream config = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); 

in C #.

Dies alles funktionierte gut in Visual Studio, aber nachdem ich das Projekt erstellt, das Programm auf meinem Computer installiert und ausgeführt hatte, wurde der Ordner erstellt.

Aus irgendeinem Grund kann ich nicht wie üblich die Erlaubnis erhalten. Es gibt mir nur die Meldung "Sie haben keine Berechtigung zum Anzeigen oder Bearbeiten der Berechtigungseinstellungen dieses Objekts." Ich weiß nicht warum. Kann mir jemand bitte sagen, wie man entweder die Erlaubnis erhält oder den Ordner direkt löscht? Und was ist in meinem Programm schief gelaufen und hat dazu geführt?

0
Ist es auf der Wurzel C: \? Wenn ja, erstellen Sie einen Unterordner. DrMoishe Pippik vor 6 Jahren 0

2 Antworten auf die Frage

0
D.J.

Sie können immer den Besitz übernehmen, vorausgesetzt, Sie verfügen über den erforderlichen Administratorzugriff. Sobald Sie den Besitz übernehmen, müssen Sie die Eigenschaftsfenster schließen und wenn Sie wieder hinein gehen, können Sie die Berechtigungen ändern. Ich kann nicht mit den Änderungen in Ihrem Code sprechen, aber ich wette, Sie haben keinen Eigentümer des Ordners.

Ok, etwas Seltsames ist passiert. Der Ordner ist einfach verschwunden ... Ich weiß nicht wie oder warum, aber es ist nicht mehr da, ich habe mein Programm (das richtige Programm, nicht nur in Visual Studio) ausgeführt und diesmal funktionierte es perfekt. Es erstellte den Ordner und die Gegenstände im Inneren, und es funktioniert einwandfrei ... Was ist gerade passiert? GREEN FIRETRUCK vor 6 Jahren 0
Wenn ich raten musste, dass der Ordner, der dort war, bereits unter einem anderen Konto vorhanden war, und wenn er einmal gelöscht wurde, kann Ihr Programm jetzt einen eigenen erstellen. Das war ein Stück, das ich aus Ihrem Beitrag nicht ganz herausfinden konnte, und dies ist der Zeitplan, wie dies geschehen ist. Wenn Sie ein Programm ausführen, wird es normalerweise unter dem Sicherheitstoken der ausführenden Person ausgeführt, es sei denn, Sie ergreifen bestimmte Schritte. Ausnahmen wären Ordner, die von Systemkonten erstellt wurden und welche nicht. D.J. vor 6 Jahren 0
0
user2634333

Sie müssen auch anrufen SetAccessControl, um die Änderungen anzuwenden.

ds = di.GetAccessControl(); ds.AddAccessRule(fsar); di.SetAccessControl(ds); // nothing happens until you do this 

Es scheint, dass die Beispiele auf MSDN, wie hier besprochen, schmerzlich im Detail fehlen . Ich habe den Code aus diesem Artikel gehackt, um Folgendes zu erhalten, das sich gut verhält:

static bool SetAcl() { FileSystemRights Rights = (FileSystemRights)0; Rights = FileSystemRights.FullControl;  // *** Add Access Rule to the actual directory itself FileSystemAccessRule AccessRule = new FileSystemAccessRule("Users", Rights, InheritanceFlags.None, PropagationFlags.NoPropagateInherit, AccessControlType.Allow);  DirectoryInfo Info = new DirectoryInfo(destinationDirectory); DirectorySecurity Security = Info.GetAccessControl(AccessControlSections.Access);  bool Result = false; Security.ModifyAccessRule(AccessControlModification.Set, AccessRule, out Result);  if (!Result) return false;  // *** Always allow objects to inherit on a directory InheritanceFlags iFlags = InheritanceFlags.ObjectInherit; iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;  // *** Add Access rule for the inheritance AccessRule = new FileSystemAccessRule("Users", Rights, iFlags, PropagationFlags.InheritOnly, AccessControlType.Allow); Result = false; Security.ModifyAccessRule(AccessControlModification.Add, AccessRule, out Result);  if (!Result) return false;  Info.SetAccessControl(Security);  return true; }