调试System.UnauthorizedAccessException(通常后跟:拒绝
访问路径)
今天,我要向您介绍System.UnauthorizedAccessException。异常通常是由IO错误引起的,但其他问题(如安全限制)也可以利⽤此错误。我们⼀起挖进去!
制造错误
捕捉异常⾮常简单。让我们创建⼀个⼩程序来触发和捕获此错误。在编写代码之前,我将创建⼀个名为c:\的⽂本⽂件。创建后,右键单击⽂件,选择属性并启⽤只读复选框。这会引起意外!,⽂件为只读。对于代码:
class Program
{
static void Main(string[] args)
{
var path = "c:\\temp\\";
try
{
File.Delete(path);
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine(e);
}
}
}
如代码所⽰,我们只需捕获UnauthorizedAccessException并将其记录到控制台。
文件访问被拒绝调试这个错误
UnauthorizedAccessException不包含其他状态或错误代码属性,因此您可以了解发⽣了什么。唯⼀的指⽰是查看消息属性,在⼤多数情况下,该属性类似于:
Access to the path 'c:\' is denied.
那么,为什么拒绝访问?我们可以先排除⼀些我见过的⼈们提出错误答案的场景:
如果在磁盘上不到⽂件(这不会引发UnauthorizedAccessException)。
如果⼀个⽂件当前被另⼀个程序锁定(这将引发⼀个IOException)。
如果⽂件被Windows阻⽌。
访问不存在的⽬录中的⽂件(这会引发DirectoryNotFoundException)。
只读⽂件
处理⽂件时,最容易检查的可能是右键单击⽂件并检查是否选中了只读复选框:
只需取消选中“只读”,然后再试⼀次。
如果需要,可以解锁C中的只读⽂件,然后重试:
class Program
{
static void Main(string[] args)
{
var path = "c:\\temp\\";
try
{
File.Delete(path);
}
catch (UnauthorizedAccessException)
{
FileAttributes attributes = File.GetAttributes(path);
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
attributes &= ~FileAttributes.ReadOnly;
File.SetAttributes(path, attributes);
File.Delete(path);
}
else
{
throw;
}
}
}
}
当前⽤户⽆权访问⽂件
UnauthorizedAccessException的另⼀个实例是由⽤户执⾏程序时出现的问题引起的。如果不以提升模式运⾏(在Windows中具有管理权限),则当前⽤户将⽆法访问各种Windows⽬录,如c:\ Windows和c:\Program Files。解决此错误的⼀个简单⽅法是以管理员⾝份运⾏程序。如果错误是由Windows服务⽣成的,请打开“服务”,在列表中到您的服务并双击它。在“登录”选项卡上,确保您的服务配置为具有导致异常的资源访问权限的⽤户。作为⽹络服务运⾏的服务对本地资源的访问⾮常有限。我建议您与系统管理员聊天,以确定是要与默认服务⽤户⼀起使⽤,还是创建具有⾃定义权限的⾃定义服务⽤户。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论