Unity-Mono在检查目录权限时抛出PlatformNotSupportedException

时间:2014-05-02 13:42:01

标签: c# mono unity3d

我使用下面的代码来检查Windows中目录的权限。

我在Unity 3.5.7f6中使用" PC& Mac和#34; BuildSettings中的平台。

我遇到以下异常:

  1. PlatformNotSupportedException
  2. 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;
            }
        }
    }
    
  3. 我尝试过打印操作系统版本:

    Environment.OSVersion.Platform
    

    它打印: WindowsNT 5.1.2600(XP)

    我在上面尝试的是获取文件夹是否具有权限(读取或写入)。

    帮我解决这个问题。

2 个答案:

答案 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希望这可以帮助其他人在类似的船上......