系统.UnauthorizedAccessException(第一次机会异常)

3

我在这段代码中遇到了以下异常:

类型为“System.UnauthorizedAccessException”的第一次机会异常出现在 mscorlib.dll 中。

异常信息如下:

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

它正在列出所有扩展名为.exe的文件,虽然对于某些目录它可以工作,但是对于某些目录它会抛出这个错误。如果您有任何解决方法,将不胜感激!

“First chance exception” 在异常处理程序被调用之前发生。如果您不想让 VS 在这些情况下停止,请取消 Debug > Exceptions 中的复选框。请注意,以管理员身份运行调试器会改变其行为... 您应该在有和没有提升权限的情况下测试您的程序。 - Jim Balter
谢谢,提升的权限起作用了!同时在元数据中也有安全权限。 - ScorpioBlue
3个回答

5

除此之外,如果没有.exe文件,只有.dll文件,你该怎么办? - Hot Licks
@HotLicks,我不确定您如何在没有经过exe的情况下执行dll中的代码。即使您通过rundll32或powershell等间接方式执行,这些都是可以作为管理员运行的.exe文件。如果您知道有一个.exe文件,但无法控制它,则始终可以生成自己的.exe文件,并要求提升权限(并将结果返回给父.exe文件)。 - V Maharajh

3
如果您使用的是Vista,Program Files文件夹会受到操作系统UAC的保护。
在较早版本的Windows中,假定用户将以管理员权限运行的应用程序在受限用户帐户下运行时会出现问题,通常是因为它们试图写入机器范围或系统目录(如Program Files)或注册表键。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)

3

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


我如何以提升的权限运行调试器?我正在使用VS 2012。 - ScorpioBlue
重新启动开发工具;选择“以管理员身份运行”;您可以通过右键单击来执行此操作。 - Bathsheba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接