以编程方式向文件夹添加权限

Posted

技术标签:

【中文标题】以编程方式向文件夹添加权限【英文标题】:Programmatically Adding Permissions to a Folder 【发布时间】:2012-07-13 19:14:45 【问题描述】:

我有一个问题,我需要为所有经过身份验证的用户添加对文件夹的访问权限,以存储应用程序相关设置。我发现这可以用下面的代码来完成......

var Info = new DirectoryInfo(settingsdir);
var Security = Info.GetAccessControl(AccessControlSections.Access);

Security.AddAccessRule(
    new FileSystemAccessRule(
        "Authenticated Users", FileSystemRights.Modify,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None,
        AccessControlType.Allow));

我发现的问题是“经过身份验证的用户”是 Windows 上的系统帐户,但是在不同语言版本的 Windows 上,此帐户名称被翻译,例如在德国,此帐户称为“Authentifizierte Benutzer”。有没有办法知道该帐户的正确名称(无需遍历每种语言并找到正确的帐户名称)。

【问题讨论】:

【参考方案1】:

我建议您使用 Well Known SID 列表(请参阅http://support.microsoft.com/kb/243330)。经过身份验证的用户始终是 SID:S-1-5-11。如果你使用它,它应该与语言无关(但我没有测试过)。

创建一个SecurityIdentifier 并改用它:

var sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); 

Security.AddAccessRule(
   new FileSystemAccessRule(
       sid,
       FileSystemRights.Modify,
       InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
       PropagationFlags.None,
       AccessControlType.Allow));

【讨论】:

也为我工作,但我不得不致电Info.SetAccessControl(Security) 提交此处所述的更改:***.com/questions/8944765/… AddAccessRule 或 ModifyAccessRule ?

以上是关于以编程方式向文件夹添加权限的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式向 WPF 中的文件添加写入权限

LibreOffice/OpenOffice 能否以编程方式向现有的 .docx/.xlsx/.pptx 文件添加密码?

以编程方式向按钮添加操作

如何向 SimulatorTrampoline 添加权限以访问特定文件夹

使用 C# 以编程方式删除“包括来自此对象父级的可继承权限”复选框

以编程方式向用户授予特定表权限的最佳方法?