2

当我尝试使用Directory.GetDirectories(systemVolumePath)我的应用程序访问系统卷时,会引发 UnauthorizedAccessException。美好的。我已经在这里看到了所有使用的答案try catch- 这不是我想要的。

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

谢谢

4

3 回答 3

0

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

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

在 .NET 中,您可以使用声明式语法命令式语法来做到这一点。

这是来自 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");
}
于 2012-11-16T13:36:30.833 回答
0

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

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

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

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

这是世界多用户环境的一次有趣的短途旅行。

如果您想从自己的代码中执行此操作,这些 SO 帖子似乎涵盖了它:

在另一个用户的凭据下启动进程

使用 Process.Start() 从 Windows 服务中以不同用户身份启动进程

于 2012-11-16T13:32:14.160 回答
0

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

如果 PSExec适合您的使用场景,它将帮助您实现所需的功能。

于 2012-11-16T13:40:35.910 回答