访问被拒绝到文件夹


0

我以前遇到过这个问题,但是我总是可以通过转到安全选项卡,在属性中,然后转到Advanced来修复它,然后最终将Admin添加到访问权限列表中。但在这种情况下,我实际上有一个Windows窗体应用程序,其中,我使用此代码:

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

在C#中。

这一切都在Visual Studio中运行良好,但是一旦我构建了项目,在我的计算机上安装了程序并运行它,它就创建了该文件夹。

出于某种原因,我不能以通常的方式获得许可。它只是给我一条消息“你没有权限查看或编辑这个对象的权限设置。” 我不知道为什么。有人可以告诉我如何获得许可,或者直接删除文件夹?我的程序出了什么问题并导致这种情况发生?


它在根C:\?如果是这样,请创建一个子文件夹。
DrMoishe Pippik

Answers:


0

假设您拥有必要的管理员权限,您可以随时拥有它。获得所有权后,您必须关闭属性窗口,然后当您返回时可以更改权限。我无法谈论您的代码中的更改,但我打赌您没有该文件夹的“所有权”。


好吧,发生了一些奇怪的事情。那个文件夹刚刚消失了...我不知道怎么回事,为什么,但它不再存在了,我运行了我的程序(正确的程序,而不仅仅是视觉工作室内),这一次,它完美地工作,它创建了文件夹和里面的物品,它运作正常......刚刚发生了什么?
GREEN FIRETRUCK

如果我不得不猜测,那里的文件夹已经存在于另一个帐户下,一旦被删除,你的程序现在可以创建它自己的文件夹了。这是我无法完全从你的帖子中找到的一篇文章,这是发生这种情况的时间表。通常,当您运行任何程序时,它将在执行它的人的安全令牌下执行,除非您采取特定步骤。例外是由系统帐户创建的文件夹,而不是。
DJ

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;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.