2013-06-27 23 views
2

下面的代码在Visual Studio在管理员帐户下运行时工作正常。 但是,当VS在非特权帐户下运行时,Save()方法会抛出UnauthorizedAccessException,但在这种情况下,我完全不明白为什么Demand()不会抛出SecurityException。当尝试写入文件时,需求不会抛出异常抛出UnauthorizedAccessException

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."); 
    } 
+0

你尝试使用permission.Assert()吗? – Bobby5193

+0

试过。相同的结果:UnauthorizedAccessException – EngineerSpock

回答

1

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

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