我使用下面的代码来检查Windows中目录的权限。
我在Unity 3.5.7f6中使用" PC& Mac和#34; BuildSettings中的平台。
我遇到以下异常:
UnauthorizedAccessException
string l_userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
DirectorySecurity folderSecurity;
//Way 1: Getting **PlatformNotSupportedException** with below line.
folderSecurity = new DirectorySecurity(a_directoryPath, AccessControlSections.Audit);
//Way 1---ENDS HERE
//Way 2: Getting **UnauthorizedAccessException** in last line of Way 2 block.
DirectoryInfo l_directory = new DirectoryInfo(a_directoryPath);
folderSecurity = l_directory.GetAccessControl(AccessControlSections.Audit);
//Way 2---ENDS HERE
foreach (FileSystemAccessRule fileSystemAccessRule in folderSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
string l_domain_userName = fileSystemAccessRule.IdentityReference.Value;
if (l_domain_userName.Equals(l_userName))
{
string l_userRights = fileSystemAccessRule.FileSystemRights.ToString();
Debug.Log(l_domain_userName + ":" + l_userRights);
if (fileSystemAccessRule.FileSystemRights.HasFlag(a_rightToCheck))
{
Debug.Log("-----have Accesss:" + a_rightToCheck);
l_isGranted = true;
break;
}
}
}
我尝试过打印操作系统版本:
Environment.OSVersion.Platform
它打印: WindowsNT 5.1.2600(XP)
我在上面尝试的是获取文件夹是否具有权限(读取或写入)。
帮我解决这个问题。
答案 0 :(得分:1)
简短回答:目前Unity尚未实现此功能。
Unity正在使用相当旧的Mono版本。似乎有一些关于移动平台和控制台的许可问题,因此他们无法简单地使用最新版本的Mono。
正如您在Unity Mono source code中看到的那样,DirectorySecurity
的构造函数只会引发PlatformNotSupportedException
。由于GetAccessControl
取决于DirectorySecurity
,因此它也只是raise an exception。
如果您解释为什么需要权限或最终目标是什么,我们可以为您的问题找到另一种解决方案。
答案 1 :(得分:0)
有些目录安全代码未在Mono 中以独立于平台的方式实现,即使在4.8中也是如此。
当我在Unix机器上运行Mono时尝试编辑文件夹的权限时,我遇到了类似的问题。这提出了PlatformNotSupportedException from the NativeObjectSecurity class希望这可以帮助其他人在类似的船上......