我正在开发的工具需要为它创建的文件授予"完全控制"访问权限。这个文件需要可以被所有Windows账户(包括未来的账户)读取、修改和删除。这个目标能够实现吗?
我知道我可以尝试为一个特定的用户实现这个目标:
FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow);
FileSecurity fSecurity = File.GetAccessControl(filePath);
fSecurity.SetAccessRule(rule);
File.SetAccessControl(filePath, fSecurity);
但是如何将其授予所有用户?甚至是未来可能存在的账户?如果后者不可能,那么如何满足第一个要求?
谢谢。
编辑:
这是我用于解决问题的代码。取自回答者的链接。
private void GrantAccess(string fullPath)
{
DirectoryInfo dInfo = new DirectoryInfo(fullPath);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.AddAccessRule(new FileSystemAccessRule(
new SecurityIdentifier(WellKnownSidType.WorldSid, null),
FileSystemRights.FullControl,
InheritanceFlags.ObjectInherit |
InheritanceFlags.ContainerInherit,
PropagationFlags.NoPropagateInherit,
AccessControlType.Allow));
dInfo.SetAccessControl(dSecurity);
}
请注意链接中提到的PropagationFlags.NoPropagateInherit
,这是必需的。它甚至授予未来帐户特权。
new SecurityIdentifier(WellKnownSidType.WorldSid, null)
,该方法会返回一个SecurityIdentifier对象。"Everyone" 只适用于英语 Windows 系统安装版,使用另一种方法可以确保其兼容多种语言版本。 - Angelo Vargas