在尝试写入文件时,Demand不会抛出异常会抛出UnauthorizedAccessException

时间:2013-06-27 10:32:26

标签: c# .net security code-access-security

当Visual Studio在管理员帐户下运行时,以下代码可以正常工作。 但是当VS在非priveleged帐户下运行时,Save()方法抛出UnauthorizedAccessException,但在这种情况下我完全不明白为什么Demand()不会抛出SecurityException。

public void SetLoggingLevel(string loggerRuleName, LoggingLevel loggingLevel)
    {           
        foreach (XElement loggerRule in GetLoggerElements().Where(loggerRule => CompareWithLoggerRule(loggerRuleName, loggerRule)))
        {
            loggerRule.SetAttributeValue("minlevel", loggingLevel.ToString());

            var permission = new FileIOPermission(FileIOPermissionAccess.Write, Source);
            permission.Demand();

            _configFile.Save(Source); //Writing to the xml-file
            return;
        }
        throw new RuleNotFoundException("The rule not found.");
    }

1 个答案:

答案 0 :(得分:1)

FileIOPermission检查.NET代码访问安全模型下的代码权限,而不是Windows文件系统中的用户权限。由于您的代码在管理员帐户下运行,因此代码可能具有足够的FileIOPermission,因此当在不同的用户帐户下运行时需求通过就不足为奇了。

由于对FileIOPermission的需求确实通过,代码会尝试保存文件,即在非管理方案中遇到用户权限不足的情况。当操作系统拒绝访问目标资源时,UnauthorizedAccessException是预期的异常类型。