【问题标题】:Unauthorized access exception while running as admin以管理员身份运行时出现未经授权的访问异常
【发布时间】:2018-03-09 09:17:02
【问题描述】:

我知道有很多关于获得的问题

“System.UnauthorizedAccessException”。

但是,我在任何这些问题中都找不到解决方案,因为大多数答案都参考了其中一个Microsoft 帮助页面。

我的情况: 我尝试将一些用户输入保存为 .csv,以便在需要时将其导入。

我的代码:

var csv = new System.Text.StringBuilder();
            string dir = Path.Combine(Environment.GetFolderPath
            (Environment.SpecialFolder.DesktopDirectory), "test.csv");

            var newLine = string.Format("{0},{1},{2},{3},{4}", txtFirstName.Text, txtLastName.Text, txtEmail.Text,
                txtPhone.Text, txtPlace.Text);

            csv.AppendLine(newLine);

            if (!File.Exists(dir))
            {

                using (FileStream fs = File.Create(dir))
                {
                    Byte[] info = new System.Text.UTF8Encoding(true).GetBytes("FirstName,LastName,Email,Phone,Place");
                    // Add headers to the file.
                    fs.Write(info, 0, info.Length);
                }
            }

            try
            {
                File.AppendAllText(dir, csv.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }

如您所见,我正在尝试将所有内容写入我的桌面,在一个名为“test.csv”的文件中。我以管理员身份运行 Visual Studio,我桌面上的文件不是只读的。 有人知道为什么这仍然失败吗?

编辑:我在台式计算机上将其作为标准 UWP 应用程序运行。

【问题讨论】:

  • 您是否从任务管理器中检查了运行该应用程序的用户?当您在 File.Exists、File.Create 和 File.Append 遇到异常时?
  • UWP 对创建和访问文件非常严格。我建议先查看File Access Permissions documentation,然后查看Create, Write and Read Quickstart,并使用Windows.Storage 命名空间进行文件操作。
  • 既然这是 UWP 应用,您是否在清单中添加了 broadFileSystemAccess?
  • 您还应该关注代码中的命名。 file dir ... 的命名非常不清楚
  • 有多种方法可以访问 UWP 中的各种文件系统位置,使用 StorageFolders - 如果它是已知文件夹,请查看 KnownFolders class。如果您想要更广泛的访问权限,您需要按照@KenTucker 的建议将BroadFileSystemAccess 添加到清单中。

标签: c# uwp visual-studio-2017 windows-10 unauthorizedaccessexcepti


【解决方案1】:

来自 UWP 进程的文件访问受到限制。为了写入桌面(或任意位置),您的应用程序需要使用文件保存对话框并让用户确认/选择位置。然后,您将能够保存到桌面或用户决定选择的任何位置。

在即将到来的 Windows 10 的 2018 年春季更新中,我们将为 UWP 应用程序引入一项新功能(“broadFileSystemAccess”),这将使其变得更好。如果您在清单中声明此功能,该应用将在首次启动时征求用户同意以获得广泛的文件系统访问权限,然后您将能够访问当前用户有权访问的所有位置。

如果您需要适用于 Windows 10 早期版本(2018 年春季更新之前)的解决方案并且文件对话框不是一个可行的选项,那么您可以考虑向处理文件操作的 UWP 包添加完全信任进程代表您的 UWP 进程。您可以通过 FullTrustProcessLauncher API 从 UWP 启动该完全信任进程:https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.fulltrustprocesslauncher

【讨论】:

  • 顺便说一句,关于您问题的“以管理员身份运行”部分:即使您以管理员身份运行 VS,启动的 UWP 进程仍然未提升运行。 UWP 应用无法以提升的权限运行。
猜你喜欢
  • 1970-01-01
  • 2014-07-01
  • 2010-12-13
  • 2019-06-11
  • 2018-08-21
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2018-08-23
相关资源
最近更新 更多