2013-06-27 122 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是預期的異常類型。