【发布时间】:2012-02-24 21:00:43
【问题描述】:
我开发的工具需要授予由它创建的文件的访问权限“完全控制”。它需要从所有 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 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 是必需的(在链接的最后提到)。它确实为未来的帐户授予特权。
【问题讨论】:
-
请注意,不要使用“每个人”,而是使用返回 SecurityIdentifier 对象的
new SecurityIdentifier(WellKnownSidType.WorldSid, null)。每个人都只适用于英文 Windows 安装,使用其他方法确保它与多个语言版本兼容。 -
@trukin 你能回答吗?谢谢
-
@nawfal:我也遇到了同样的问题,一旦安装了应用程序,我需要授予对安装文件夹的访问权限,但是我在哪里可以编写此代码?
-
@HinaKhuman 给予安装文件夹权限由安装程序更好地处理。我不知道您使用的是哪一个,但它应该很简单。如果您想从 C# 中执行此操作,请从您想要的任何位置调用 GrantAccess 方法,但您的应用程序本身应该拥有权限。
-
@nawfal:谢谢!在此处查看详细问题:stackoverflow.com/q/48165315/5743676
标签: c# .net winforms permissions user-accounts