Раньше у меня была эта проблема, но я всегда могу ее исправить, перейдя на вкладку «Безопасность» в свойствах, затем «Дополнительно», а затем в конце концов добавлю «Админ» в список разрешений доступа. Но в этом случае у меня фактически есть приложение Windows Forms, в котором я использую этот код:

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

в C #.

Все это прекрасно работало в Visual Studio, но как только я собрал проект, установил программу на свой компьютер и запустил ее, он создал эту папку.

Почему-то я не могу получить разрешение обычным способом. Это просто дает мне сообщение: «У вас нет разрешения на просмотр или редактирование настроек разрешений этого объекта». Я не знаю почему. Может кто-нибудь подскажите, пожалуйста, как получить разрешение или сразу удалить папку? И что пошло не так в моей программе и вызвало это?

2 ответа2

0

Вам также необходимо вызвать 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;
}
0

Вы всегда можете взять на себя ответственность, если у вас есть необходимый доступ администратора. После того, как вы вступите во владение, вам придется закрыть окна свойств, а затем, когда вы вернетесь назад, вы сможете изменить разрешения. Я не могу говорить об изменениях в вашем коде, но держу пари, что у вас нет «владельца» папки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .