C#Directory.GetDirectories - 如何解决UnauthorizedAccessException?

时间:2012-11-16 13:11:54

标签: c# io

当我尝试使用Directory.GetDirectories(systemVolumePath)访问系统卷时,我的应用会抛出UnauthorizedAccessException。精细。我在这里看到了使用try catch的所有答案 - 这不是我所追求的。

如何在具有足够权限访问所有文件夹的帐户下运行我的应用程序?

由于

3 个答案:

答案 0 :(得分:0)

我已成功使用runas.exe工具执行此操作。

runas.exe /savecred /user:yourusernamehere my_app_that_needs_permissions.exe

这将在当前桌面环境中运行应用程序,但使用其他用户的配置文件和权限,因此将使用该用户凭据进行文件访问(包括创建文件)。

有趣的副作用是,您的应用程序创建的任何文件都将作为所有者创建为其他用户,并且您当前的用户可能没有访问它们所需的权限。

这是一个有趣的小世界多用户环境。

如果您正在尝试使用自己的代码执行此操作,这些SO帖子似乎涵盖了它:

Launch a process under another user's credentials

Using Process.Start() to start a process as a different user from within a Windows Service

答案 1 :(得分:0)

据我所知,你无法“解决”安全问题。您可以做的是,需要权限。

您必须要求用户提升,以允许您的代码以所需的权限运行。

在.NET中,您可以使用Declarative SyntaxImperative Syntax

执行此操作

以下是Microsoft的一个示例,其中使用命令式语法来要求单个文件夹的权限:

FileIOPermission permFileIO =
new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\\Temp");
try 
{
    // Demand the permission to access the C:\Temp folder.
    permFileIO.Demand();
    resultText.Append("The demand for permission to access the C:\\Temp folder succeeded.\n\n");
}
catch (SecurityException se)
{
    resultText.Append("The demand for permission to access the C:\\Temp folder failed.\nException message: ");
    resultText.Append(se.Message);
    resultText.Append("\n\n");
}

答案 2 :(得分:0)

要访问这些目录,您需要在LocalSystem帐户下运行,这不是您应该轻易考虑的事情。

如果适合您的使用场景,

PSExec将帮助您实现所需。