Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DirectorySecurity未正确设置权限_C# - Fatal编程技术网

C# DirectorySecurity未正确设置权限

C# DirectorySecurity未正确设置权限,c#,C#,我有一个C代码,可以创建一个文件夹并设置一些权限。以下是代码示例: static void Main(string[] args){ Directory.CreateDirectory("C:\\vk07"); DirectorySecurity dirSec = Directory.GetAccessControl("C:\\vk07"); dirSec.AddAccessRule(new FileSystemAccessRule("INTR

我有一个C代码,可以创建一个文件夹并设置一些权限。以下是代码示例:

static void Main(string[] args){

        Directory.CreateDirectory("C:\\vk07");
        DirectorySecurity dirSec = Directory.GetAccessControl("C:\\vk07");

        dirSec.AddAccessRule(new FileSystemAccessRule("INTRANET\\fGLBChorusUsers", FileSystemRights.ReadAndExecute, AccessControlType.Allow));            
        Directory.SetAccessControl("C:\\vk07", dirSec);
}
当我检查上面创建的文件夹上设置的权限时,它只显示选中的“特殊权限”,而不是读取和修改(这是我在代码中设置的)


有人能帮我吗?我是ACL新手,所以不太了解它。

文件系统权限。ReadAndExecute
不允许您修改。这是只读的。 您需要
FileSystemRights.Modify
获取完整范围。 您可能需要检查可用的选项

以下是上述情况的一个示例:

String dir = @"C:\vk07"; 
Directory.CreateDirectory(dir); 
DirectoryInfo dirInfo = new   DirectoryInfo(dir); 
DirectorySecurity dirSec = dirInfo.GetAccessControl(); 
dirSec.AddAccessRule(new FileSystemAccessRule("INTRANET\\fGLBChorusUsers",FileSystemRights.Modify,AccessCo‌ntrolType.Allow)); 
dirInfo.SetAccessControl(dirSec);

我也有这个问题。执行以下代码后:

var security = Directory.GetAccessControl(folderPath);
security.AddAccessRule(
    new FileSystemAccessRule(
        new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null),
        FileSystemRights.Modify,
        InheritanceFlags.ObjectInherit,
        PropagationFlags.InheritOnly,
        AccessControlType.Allow
    )
);
Directory.SetAccessControl(folderPath, security);
…然后folderPath的属性对话框将显示如下:

如您所述,仅选中“特殊权限”,但如果单击“高级”,则会看到:

请注意,在此对话框中,网络服务具有修改权限


似乎当您以编程方式设置权限时,Windows不会在“文件夹属性”对话框中显示这些权限,但它们仍然存在于“高级安全设置”下。我还确认了我的窗口服务(作为网络服务运行)能够访问folderPath中的文件。

我也遇到了同样的问题,实际原因是如果您查看另一篇文章中的网络服务图片,它仅适用于文件。基本权限仅在第一张图片上显示,如果它们显示“此文件夹、子文件夹和文件”,则要执行此操作,需要设置两个标志-InheritanceFlags.ContainerInherit+InheritanceFlags.ObjectInherit

    Try
        'If destination directory does not exist, create it first.
        If Not Directory.Exists(path) Then Directory.CreateDirectory(path)

        Dim dir As New DirectoryInfo(path)
        Dim dirsec As DirectorySecurity = dir.GetAccessControl()
        'Remove inherited permissions
        dirsec.SetAccessRuleProtection(True, False)

        'create rights, include subfolder and files to be inherited by this
        Dim Modify As New FileSystemAccessRule(username, FileSystemRights.Modify, InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)
        Dim Full As New FileSystemAccessRule(admingroup, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)

        dirsec.AddAccessRule(Modify)
        dirsec.AddAccessRule(Full)
        'Set
        dir.SetAccessControl(dirsec)
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

此代码适用于我:

    security.AddAccessRule(
    new FileSystemAccessRule(
        "domain\\login",
        FileSystemRights.Modify,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None,
        AccessControlType.Allow
    ));

我在VB中使用了相同的代码,设置FileSystemRights.FullControl

        Dim fsRule As FileSystemAccessRule = New FileSystemAccessRule(sid, FileSystemRights.FullControl, (InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit), PropagationFlags.None, AccessControlType.Allow)

嗨,我也试过修改。无论我做什么,我只能看到该文件夹上设置的“特殊权限”。因此,我想我在这里遗漏了一些东西。请尝试以下代码
String dir=@“C:\vk07”;CreateDirectory(dir);DirectoryInfo dirInfo=新的DirectoryInfo(dir);DirectorySecurity dirSec=dirInfo.GetAccessControl();dirSec.AddAccessRule(新的FileSystemAccessRule(“INTRANET\\fglbChrousers”,FileSystemRights.Modify,AccessControlType.Allow));dirInfo.SetAccessControl(dirSec)添加和删除的一个很好的例子可以找到,我有完全相同的问题,我发现遵循Alexander V.的建议并使用PropagationFlags。没有一个固定的问题被问到c#?