Доступ к папке запрещен
Раньше у меня была эта проблема, но я всегда могу ее исправить, перейдя на вкладку "Безопасность" в свойствах, затем "Дополнительно", а затем в конце концов добавлю "Админ" в список разрешений доступа. Но в этом случае у меня фактически есть приложение Windows Forms, в котором я использую этот код:
FileStream config = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
в C#.
Все это прекрасно работало внутри Visual Studio, но как только я собрал проект, установил программу на свой компьютер и запустил ее, он создал эту папку.
Почему-то я не могу получить разрешение обычным способом. Это просто дает мне сообщение: "У вас нет разрешения на просмотр или редактирование настроек разрешений этого объекта". Я не знаю почему. Может кто-нибудь подскажите, пожалуйста, как получить разрешение или сразу удалить папку? И что пошло не так в моей программе и вызвало это?
2 ответа
Вы всегда можете взять на себя ответственность, если у вас есть необходимый доступ администратора. После того, как вы вступите во владение, вам придется закрыть окна свойств, а затем, когда вы вернетесь назад, вы сможете изменить разрешения. Я не могу говорить об изменениях в вашем коде, но держу пари, что у вас нет "владельца" папки.
Вам также нужно позвонить SetAccessControl
применить изменения.
ds = di.GetAccessControl();
ds.AddAccessRule(fsar);
di.SetAccessControl(ds); // nothing happens until you do this
Кажется, что примеры на MSDN очень не хватает в деталях, как обсуждалось здесь. Я взломал код из этой статьи, чтобы получить следующее, которое ведет себя хорошо:
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;
}