gpt4 book ai didi

c# - UnauthorizedAccessException 即使应用程序以管理员身份运行

转载 作者:太空宇宙 更新时间:2023-11-03 13:08:48 26 4
gpt4 key购买 nike

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

应用程序以管理员身份运行**,通常报告来自 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" />

最佳答案

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

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

解决方案说明

假冒与许可

Impersonation is the ability of a thread to execute using a different security information than the process that owns the thread. Typically, a thread in a server application impersonates a client. This allows the server thread to act on behalf of that client to access objects on the server or validate access to the client's own objects. [SOURCE: A Complete Impersonation Demo]

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

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

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

应用设计

我建议您对用户反馈持保留态度,因为用户对他们遇到的问题提供不准确或不完整的描述的情况并不少见。

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

补充阅读

关于c# - UnauthorizedAccessException 即使应用程序以管理员身份运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29887832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com