我开发的工具需要将访问权限“完全控制”授予由它创建的文件。需要从所有Windows帐户甚至可能的未来帐户中读取,修改和删除它。这可以实现吗?
我知道我可以尝试使用SPECIFIC_USER:
FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow);
FileSecurity fSecurity = File.GetAccessControl(filePath);
fSecurity.SetAccessRule(rule);
File.SetAccessControl(filePath, fSecurity);
但是如何将其授予所有用户?甚至可能的未来帐户?如果后一部分不可能,如何进行第一项要求?
感谢。
编辑:
这是适合我的代码。取自回答者的链接。
private bool 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);
return true;
}
请注意所需的PropagationFlags.NoPropagateInherit
(在链接的最后一位提及)。它确实为未来的账户授予特权。
答案 0 :(得分:112)
请注意使用此功能的人。
为FileSystemAccessRule
使用文字字符串时,应该是WellKnownSidType.WorldSid
而不是"everyone"
。
原因是因为有多种Window语言,Everyone只适用于EN语言,所以对于西班牙语,它可能是“Todos”(或其他)。
using System.Security.AccessControl;
using System.Security.Principal;
using System.IO;
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);
}
答案 1 :(得分:12)
您需要完全控制机器上的“Everyone”组。在MSDN上发现了this帖子,并谈到了它。
希望这适合你。