Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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#_C# - Fatal编程技术网

无法将某些或所有标识引用翻译为c#

无法将某些或所有标识引用翻译为c#,c#,C#,我试图将访问文件夹的权限授予用户,但当我试图运行该程序时,错误显示:无法翻译部分或所有标识引用 以下是我正在使用的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; usi

我试图将访问文件夹的权限授予用户,但当我试图运行该程序时,错误显示:
无法翻译部分或所有标识引用

以下是我正在使用的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Security;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Management;
using System.Management.Instrumentation;

namespace FolderLock
{
    public partial class Lock : Form
    {
        public Lock()
        {
            InitializeComponent();

            SetAccess();
        }

        private void Lock_Load(object sender, EventArgs e)
        {

        }

        public void SetAccess()
        {
            DirectoryInfo myDirectoryInfo = new DirectoryInfo("C:/Users/Trov/Desktop/Test");

            DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();

            string User = System.Environment.UserDomainName + "\\" + "92111092";

            myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.Read, AccessControlType.Deny));

            myDirectoryInfo.SetAccessControl(myDirectorySecurity);
        }

    }
}

我找到了一种方法,不再试图允许或拒绝特定用户对文件夹的访问,而是创建一个知名的经过身份验证的用户来拒绝或允许其访问文件夹

代码如下:

public void SetAccess()
        {
            DirectoryInfo myDirectoryInfo = new DirectoryInfo(@"C:/Users/Trov/Desktop/Test");

            var sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); 

            DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();

            myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(sid, FileSystemRights.Read, AccessControlType.Deny));

            myDirectoryInfo.SetAccessControl(myDirectorySecurity);

            this.Hide();

            this.Close();
        }

谢谢

哪一行失败了?这一行先生:
myDirectorySecurity.AddAccessRule(新的FileSystemAccessRule(User,FileSystemRights.Read,AccessControlType.Deny))您试图设置访问权限的帐户是否确实存在?错误消息实际上是一个IdentityNotMappedException,它“表示身份无法映射到已知身份的主体的异常”。当我尝试使用名为“92111092”的帐户时,我得到了它,当使用真实帐户名时,也没有例外。是的,您是对的,先生,当我尝试使用计算机上实际存在的帐户名时,它工作正常。但是,先生,如果我在A计算机上安装了这个程序(A计算机的用户帐户名为“92111092”),而我在B计算机上安装了这个程序(B计算机的用户帐户名为“92111092”),那该怎么办呢。但是我不希望计算机B也通过使用计算机B中不存在的“92111092”来访问“Test”文件夹。谢谢。您不能为不存在的帐户设置ACL;但是,您可以设置默认情况下拒绝所有用户访问的ACL,然后为应该具有访问权限的特定用户添加允许ACL。使用SID而不是用户名修复了我的错误。