winforms 如何为所有用户授予我的应用程序创建的文件的完全权限?

bvpmtnay  于 2023-03-31  发布在  其他
关注(0)|答案(3)|浏览(177)

我开发的工具需要授予访问权限“完全控制”由它创建的文件。它需要从所有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是必需的(在链接的最后提到)。它甚至可以为未来的帐户授予特权。

qnyhuwrf

qnyhuwrf1#

注意使用这个的人。
当使用FileSystemAccessRule的文字字符串时,它应该是WellKnownSidType.WorldSid而不是"everyone"
原因是因为有多种Windows语言,而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);
}
5hcedyr0

5hcedyr02#

您需要完全控制机器上的“Everyone”组。在MSDN上找到了this帖子,其中谈到了它。
希望这对你有用。

ccrfmcuu

ccrfmcuu3#

这里是类似的代码,但仅限于对单个文件执行此操作,这也是我在这里的原因。但为了更好的安全性,您可能希望使用WellKnownSidType.AuthenticatedUserSid而不是WordSid。

var fileSecurity = new System.Security.AccessControl.FileSecurity();
var everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
var rule = new FileSystemAccessRule(everyone, FileSystemRights.FullControl, AccessControlType.Allow);
fileSecurity.AddAccessRule(rule);
  
File.SetAccessControl(path, fileSecurity);

相关问题