Доступ к папке запрещен

0

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

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

в C #.

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

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

GREEN FIRETRUCK
источник
Это в корне C: \? Если это так, создайте подпапку.
DrMoishe Pippik

Ответы:

0

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

D.J.
источник
Хорошо, что-то странное случилось. Эта папка просто исчезла ... Я не знаю, как и почему, но ее больше нет, я запустил свою программу (нужную программу, а не только в Visual Studio), и на этот раз она работала отлично, Она создала папку и предметы внутри, и он работает нормально ... Что только что произошло?
GREEN FIRETRUCK
Если бы мне пришлось угадывать, папка, которая была там, уже существовала под другой учетной записью, и как только она была удалена, ваша программа теперь может создать свою собственную. Это была часть, которую я не смог понять из вашего поста, и это график того, как это произошло. Обычно, когда вы запускаете какую-либо программу, она будет выполняться под маркером безопасности того, кто ее выполняет, если вы не предпримете конкретные действия. Исключение составляют папки, созданные системными учетными записями, а что нет.
D.J.
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;
}
user2634333
источник