第一次机会异常访问路径被拒绝 (UnauthorizedAccessException)

Posted

技术标签:

【中文标题】第一次机会异常访问路径被拒绝 (UnauthorizedAccessException)【英文标题】:First Chance Exception access to path is denied (UnauthorizedAccessException) 【发布时间】:2013-06-19 16:37:03 【问题描述】:

我正在调试模式下运行应用程序,但我注意到几秒钟后,“System.UnauthorizedAccessException”类型的第一次机会异常被频繁且连续地抛出。虽然这并没有阻止我的应用程序运行,但我仍然想了解发生了什么并解决问题以帮助提高性能。

事实证明,异常是“访问路径 'XXX.dll' 被拒绝”。这让我感到困惑,因为当应用程序尝试访问 DLL 时它必须来自 Windows,它必须已经成功完成。

多次运行应用程序会导致错误发生在不同的 DLL 上,因此应用程序中发生这种情况的确切位置不是确定性的或可重复的。

有没有办法解决这个问题? 为什么会这样?

【问题讨论】:

我不知道如何解决它——它可能完全是良性的——但你可以让 Visual Studio 在它发生时停止,这样你就可以通过为所有异常类型选择“抛出”来查看调用堆栈在Debug | Exceptions.... @galford13x:发生这种情况后您的应用程序会崩溃吗? @500 - 这正是我所做的,启用 Break on Thrown 以便我可以分析它。从功能上看,它确实是良性的。但我想了解是什么原因造成的,以便在出现性能问题时解决问题。 @Dominic - 它不会崩溃,它会按照我预期的功能运行。尽管就性能问题而言,我还没有进行过分析。我的应用程序对时间敏感,因此可能会产生一些影响。 发生这种情况时调用堆栈是什么样的? 【参考方案1】:

程序集绑定日志

如果您认为可能与程序集绑定有关,请使用Scott Hanselman's instructions启用FusionLog并查看程序集绑定日志。

如果它与程序集绑定有关,它可能会帮助您找到并解决您的问题。

或者,只需自行设置注册表项。 (我只是记住了它们,因为我一直都在设置它们。)将HKLM\Software\Microsoft\Fusion\ForceLog 注册表值设置为1,将HKLM\Software\Microsoft\Fusion\LogPath 注册表值设置为C:\FusionLogs 或某个存在的路径。

示例

【讨论】:

是的! ...使用适当的路径(使用 Visual Studio 命令提示符)。 这似乎不是问题。我确信绑定工作正常,因为应用程序正确执行。如果我在应用程序执行时没有查看输出,我将永远不会意识到抛出了异常。我只是不确定为什么会出现与 .DLL 相关的访问问题(这在逻辑上似乎没有影响) 哦好的@galford13x。很抱歉,这没有帮助,但我过去曾多次遇到过程序集绑定问题,因此希望它能对某人有所帮助。 :) 如果应用程序正常执行,请尝试将 Visual Studio 设置为在 all 错误时中断。也许这会帮助您找出问题所在(如果错误不是良性的)。

以上是关于第一次机会异常访问路径被拒绝 (UnauthorizedAccessException)的主要内容,如果未能解决你的问题,请参考以下文章

我的 EventWaitHandle 说“访问路径被拒绝”,但它不是

未经授权的访问异常 - 在C#中将文件复制到其他目录时访问被拒绝的路径

访问路径被拒绝

在 C# 中访问路径被拒绝错误

调用 Directory.Move(..., ...) 时拒绝访问路径异常

java.io.FileNotFoundException异常,一是“拒绝访问”,二是“系统找不到指定路径”