UnauthorizedAccessException使用Cortana的通用Windows服务写入文件

时间:2015-10-18 03:26:47

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

我正在创建一个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服务有权写入的内容吗?我想我可以更改我的桌面应用程序,以便在需要时查找该位置的文件,如果我的方法不是& #39;工作。

1 个答案:

答案 0 :(得分:2)

UWP应用程序在应用程序容器中运行(低完整性进程),此进程无法完全访问漫游文件夹。默认情况下,它可以访问应用程序数据包文件夹“C:\ Users {user} \ AppData \ Local \ Packages {Package family name}”。

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

UWP App

        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");
    }