Directory.SetAccessControl 设置不必要的权限
Directory.SetAccessControl set unnecessary permissions
我正在尝试将程序的安装文件夹权限设置为仅限管理员。
有两种情况:文件夹需要创建和文件夹已经存在。
这是我的代码:
public static void CreatePrivateFolder(string path)
{
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
DirectorySecurity securityRules = new DirectorySecurity();
FileSystemAccessRule fsRule =
new FileSystemAccessRule(sid, FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None, AccessControlType.Allow);
securityRules.SetAccessRule(fsRule);
if (Directory.Exists(path))
{
Directory.SetAccessControl(path, securityRules);
}
else
{
Directory.CreateDirectory(path, securityRules);
}
}
当需要创建文件夹时,CreateDirectory
工作正常,文件夹的权限仅限于管理员。
奇怪的是,当我重新 运行 这段代码并流向 SetAccessControl
- 文件夹的权限被重置为没有访问限制的常规文件夹。
我做错了什么?
文件夹安全结果(针对路径 c:\folderCheck
):
更新
anrei 回答我的问题。
但是,它似乎以不同的方式出现了同样的问题:
如果该文件夹已经存在且权限不受限制,则 anrei 的代码似乎不起作用。
该文件夹的权限保持不受限制。
谢谢!
用这个代替你的 if (Directory.Exists(path))
块。
// what is
var existingACL = Directory.GetAccessControl(path);
// remove everything from what is
foreach (FileSystemAccessRule rule in existingACL.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
existingACL.RemoveAccessRuleAll(rule);
// add yours to what is
existingACL.AddAccessRule (fsRule);
// set again
Directory.SetAccessControl(path, existingACL);
我正在尝试将程序的安装文件夹权限设置为仅限管理员。
有两种情况:文件夹需要创建和文件夹已经存在。
这是我的代码:
public static void CreatePrivateFolder(string path)
{
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
DirectorySecurity securityRules = new DirectorySecurity();
FileSystemAccessRule fsRule =
new FileSystemAccessRule(sid, FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None, AccessControlType.Allow);
securityRules.SetAccessRule(fsRule);
if (Directory.Exists(path))
{
Directory.SetAccessControl(path, securityRules);
}
else
{
Directory.CreateDirectory(path, securityRules);
}
}
当需要创建文件夹时,CreateDirectory
工作正常,文件夹的权限仅限于管理员。
奇怪的是,当我重新 运行 这段代码并流向 SetAccessControl
- 文件夹的权限被重置为没有访问限制的常规文件夹。
我做错了什么?
文件夹安全结果(针对路径 c:\folderCheck
):
更新
anrei
谢谢!
用这个代替你的 if (Directory.Exists(path))
块。
// what is
var existingACL = Directory.GetAccessControl(path);
// remove everything from what is
foreach (FileSystemAccessRule rule in existingACL.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
existingACL.RemoveAccessRuleAll(rule);
// add yours to what is
existingACL.AddAccessRule (fsRule);
// set again
Directory.SetAccessControl(path, existingACL);