Win10中后台任务的文件权限

时间:2016-08-29 13:14:25

标签: c# windows-10-universal background-task unauthorizedaccessexcepti

我一直在尝试在Win10上编写一个只运行写入文件的后台任务的C#应用​​程序。

运行下面的代码会在触发后抛出UnauthorizeAccessException异常,并且访问路径' C:\ temp'否认'。 该文件和目录都具有Everyone的完全访问权限。

此外,后台任务可以访问/运行什么?我正在尝试在现代待机状态下运行后台任务,并尝试读取一些寄存器和/或运行其他工具。在现代待机状态下,这甚至可能吗?

以下是我尝试这样做的代码:

后台任务:

using Windows.ApplicationModel.Background;
using System.IO;


namespace RuntimeComponent2
{
    public sealed class Class1 : IBackgroundTask
    {

        public void Run(IBackgroundTaskInstance taskInstance)
        {
            File.WriteAllText(@"C:\temp\test.txt", "test");
        }
    }
}

主页:

using System;
using Windows.ApplicationModel.Background;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace App3
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            var exampleTaskName = "MyTask1";

            foreach (var t in BackgroundTaskRegistration.AllTasks)
            {
                t.Value.Unregister(true);
            }
            await BackgroundExecutionManager.RequestAccessAsync();
            var builder = new BackgroundTaskBuilder();

            builder.Name = exampleTaskName;
            builder.TaskEntryPoint = "RuntimeComponent2.Class1";
            builder.SetTrigger(new SystemTrigger(SystemTriggerType.TimeZoneChange, false));

            BackgroundTaskRegistration task = builder.Register();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你不能这样做,问题不在于BackgroundTask。在UWP应用程序内部,您无法在硬盘上写入。您可以阅读的唯一地方&可以使用ApplicationData.Current(LocalCacheFolder,LocalFolder等)或用户使用SaveFilePicker显式选择的任何文件夹来访问write。

此外,您需要使用此语法(Intellisense建议您使用类File,但在UWP中并不可用)

FileIO.ReadTextAsync(StorageFile file);