即使应用程序以管理员身份运行,也会出现UnauthorizedAccessException

时间:2015-04-27 05:26:53

标签: c#

我从随机用户那里收到关于UnauthorizedAccessException在随机文件夹中读取或写入(创建文件)时的随机报告。通常在自己的Documents文件夹中。更多的问题是,当应用无法将其数据写入{USER}\AppData\Roaming时。

应用程序以admin **身份运行,通常报告来自Windows 7和Windows 8用户。

如果不手动设置权限,有没有办法解决此问题。

**确定应用是否以管理员身份运行

AppDomain myDomain = Thread.GetDomain();
myDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsPrincipal myPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;
boolean isRunningasAdmin = myPrincipal.IsInRole(WindowsBuiltInRole.Administrator));

编辑:在app.manifest

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

1 个答案:

答案 0 :(得分:1)

关于问题:尝试写入磁盘时是否可以避免与权限相关的异常

简而言之,答案是:是的,这可以通过使用模仿来实现。

解决方案说明

IMPERSONATION&amp;权限

  

模拟是线程使用不同的线程执行的能力   安全信息比拥有该线程的进程。通常情况下,   服务器应用程序中的线程模拟客户端。这允许   服务器线程代表该客户端访问以访问对象   服务器或验证对客户端自己的对象的访问权限。 [来源:A Complete Impersonation Demo]

正如Aasmund Eldhuset所强调的那样,以管理员身份运行保证您将拥有访问文件系统的相应权限。

作为一个完整性检查,您可以创建一个简单的应用程序,以确保一切都按预期工作。

  1. 创建一个简单的 WinForms 应用程序,该应用程序将使用模拟将文本文件写入磁盘。
  2. 使用文件夹/目录和不同的用户权限创建测试环境
  3. 验证一切正常:
    • 运行测试应用程序并将其写入 DO 有权限的目录。
    • 运行测试应用程序并将其写入您没有*具有适当权限的目录。
  4. 应用程序设计

    我建议您尽量提供用户反馈,因为用户提供不准确或不完整的问题描述并不少见。

    在您的方案中,我会让您的应用程序尝试在应用程序启动时写入相关目录/文件夹。如果写入失败,则可以将相关信息(例如,正在执行写入操作的用户的名称)记录到事件日志(例如文本文件)中以供以后查看。

    其他阅读