【问题标题】:System.UnauthorizedAccessException (A first chance exception)System.UnauthorizedAccessException(第一次机会异常)
【发布时间】:2013-06-18 06:56:04
【问题描述】:

我收到了

“System.UnauthorizedAccessException”类型的第一次机会异常 发生在 mscorlib.dll 中

这段代码的异常:

string[] filesList = Directory.GetFiles(@"C:\Program Files (x86)\", "*.exe",
                                         SearchOption.AllDirectories);

它的作用是列出所有带有 .exe 扩展名的文件,尽管对于某些目录它可以工作,但它会抛出这个。

任何关于我可以做些什么来解决它的想法将不胜感激!

【问题讨论】:

  • “第一次机会异常”发生在异常处理程序被调用之前。如果您不希望 VS 停止这些,请取消选中 Debug > Exceptions 中的框。请注意,正如某些人所建议的那样,以管理员身份运行调试器会改变其行为……您应该在有或没有提升权限的情况下测试您的程序。
  • 谢谢,提升的权限有效!以及元数据中的安全权限。

标签: c# exception


【解决方案1】:

您需要以管理员身份运行您的应用程序。

这是他正确的做法:

http://blogs.msdn.com/b/nikhiln/archive/2007/04/19/embed-a-manifest-to-make-an-application-elevate-in-vista.aspx

【讨论】:

  • 完美,帮了大忙!非常感谢。
  • 除了没有.exe文件,只有.dlls的情况下怎么办?
  • @HotLicks,我不确定如何在不通过 exe 的情况下执行 dll 中的代码。即使您通过 rundll32 或 powershell 之类的东西间接执行此操作,它们都是可以以管理员身份运行的 .exe。如果您知道有一个 .exe,但您无法控制它,那么您始终可以生成自己的 .exe,它会要求提升(并将结果返回给父 .exe)。
【解决方案2】:

在某些版本的 Windows 上,程序文件目录被很好地锁定了。这可以防止错误的用户损坏正确运行操作系统所必需的文件系统部分。如果您以提升的权限运行调试器(和应用程序),那么它将通过。

【讨论】:

  • 如何以提升的权限运行调试器?我正在使用 VS 2012。
  • 重启开发工作室;选择“以管理员身份运行”;您可以通过右键单击来执行此操作。
【解决方案3】:

如果您使用 Vista,Program Files 文件夹受操作系统UAC 保护。

假设用户正在运行的应用程序 具有管理员权限在早期版本中遇到问题 从有限的用户帐户运行 Windows 时,通常是因为它们 试图写入机器范围或系统目录(例如 程序文件)或注册表项。 UAC 试图缓解这种情况 使用文件和注册表虚拟化,它重定向写入(和 后续读取)到用户个人资料中的每个用户位置。 例如,如果应用程序尝试写入 “C:\program files\appname\settings.ini” 并且用户没有权限 写入该目录,写入将被重定向到 “C:\Users\username\AppData\Local\VirtualStore\Program Files\appname\settings.ini”

请注意,Program Files 是特殊文件夹。如果要获取它的路径,可以使用Environment.SpecialFolder枚举。喜欢;

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多