【发布时间】:2014-11-12 17:05:28
【问题描述】:
我试图授予用户访问文件夹的权限,但是当我尝试运行程序时,错误提示:Some or all identity references could not be translated。
这是我正在使用的代码:
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);
}
}
}
【问题讨论】:
-
哪一行出错了?
-
此行先生:
myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.Read, AccessControlType.Deny)); -
您尝试为其设置访问权限的帐户是否确实存在?错误消息实际上是一个 IdentityNotMappedException,它“表示其身份无法映射到已知身份的主体的异常”。当我尝试使用名为“92111092”的帐户时会得到它,并且在使用真实帐户名时也不会出现异常。
-
是的,您说得对,先生,当我尝试使用计算机上实际存在的帐户名时,它可以正常工作。但是先生,如果我在计算机 A 上安装了这个程序(计算机 A 的用户帐户名为“92111092”),而我在计算机 B 上安装了这个程序(计算机 B 的用户帐户名为“92111092”),该怎么办?但我希望计算机 B 也无法使用计算机 B 中不存在的“92111092”访问“测试”文件夹。谢谢。
-
您不能为不存在的帐户设置 ACL;但是,您可以设置默认情况下拒绝所有用户访问的 ACL,然后为应该有权访问的特定用户添加 ALLOW ACL。
标签: c#