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

18

我有一个问题,需要给所有已认证的用户添加对一个文件夹的访问权限,以存储与应用程序相关的设置。 我发现可以使用以下代码来完成此操作...

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个回答

32

我建议您使用常用SID列表(参见http://support.microsoft.com/kb/243330)。已验证用户的SID始终为S-1-5-11。如果您使用该SID,它应该与语言无关(但我尚未测试过)。

创建一个SecurityIdentifier并使用它代替:

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

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

1
对我也起作用了,但是我必须调用 Info.SetAccessControl(Security) 来提交更改,就像这里描述的一样:https://dev59.com/hWox5IYBdhLWcg3w1Xo3 - Johan Gov
添加访问规则还是修改访问规则 - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接