【问题标题】:UnauthorizedAccessException Writing to File using Cortana's Universal Windows ServiceUnauthorizedAccessException 使用 Cortana 的通用 Windows 服务写入文件
【发布时间】:2023-04-10 09:04:01
【问题描述】:

我正在创建一个 Cortanta 应用程序(一个通用的 Windows 应用程序,在应用程序中启动了一项服务)。但我遇到了一个错误。我仍在学习这一切是如何运作的。

但这是我得到的错误:

System.UnauthorizedAccessException was unhandled by user code
  HResult=-2147024891
  Message=Access to the path 'C:\Users\JOHN\AppData\Roaming' is denied.
  Source=System.IO.FileSystem

我正在使用 TextWriter,就像我通常在常规桌面应用程序中一样。该服务缺少写入文件所需的权限。

有没有一种方法可以使用代码将服务提升到我需要的位置?我是将其添加到父通用 Windows 应用程序(Cortana 应用程序)还是需要在服务项目本身中执行此操作?

要编写的代码:

 using (TextWriter writer = File.CreateText("C:\\Users\\JOHN\\AppData\\Roaming\\APPTEST\\IPC_File.s"))
                            {
                               writer.WriteLine(voicecommand.SpeechRecognitionResult.Text.ToString());
                            }

我尝试暂时授予“所有人”访问 APPTEST 文件夹的权限,但没有任何改变。

或者有什么方法可以找出 Windows 服务有权写入的内容吗?如果我的方法是不工作。

【问题讨论】:

  • 你不应该尝试直接访问漫游文件夹,而应该使用存储api,msdn.microsoft.com/en-us/library/windows/apps/mt299098.aspx
  • 如果我尝试通过写入文件的方式与桌面应用程序通信,存储 api 是否仍然有效?桌面应用程序有没有办法知道我的通用服务/应用程序使用的存储位置?
  • 是的,您也可以将相同的存储 API 用于桌面应用程序

标签: c# service windows-services win-universal-app uwp


【解决方案1】:

UWP 应用在应用容器中运行(低完整性进程),该进程没有对 Roaming 文件夹的完全访问权限。默认情况下,它可以访问应用数据包文件夹“C:\Users{user}\AppData\Local\Packages{Package family name}”。

外部进程在不知道包系列名称的情况下访问此文件夹有点困难。您可以从 Visual Studio 打包属性中获取它。

UWP 应用

        StorageFolder localFolder = ApplicationData.Current.LocalFolder;

        var path = localFolder.Path;

        await Task.Run(() =>
        {
            using (TextWriter writer = File.CreateText(Path.Combine(path, "IPC_File.s")))
            {
                writer.Write("Hello World");
            }
        });

外部 .NET 桌面应用程序

    static void Main(string[] args)
    {
        var text = File.ReadAllText(@"C:\Users\[USER]\AppData\Local\Packages\[PACKAGE_FAMILY_ID]\LocalState\IPC_File.s");
    }

【讨论】:

    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 2022-06-16
    • 2018-10-27
    • 2016-11-29
    • 2011-09-26
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多