Win10后台任务的文件权限
File permissions for Background Tasks in Win10
我一直在尝试在 Win10 上编写一个 C# 应用程序,它只有 运行 一个写入文件的后台任务。
运行 下面的代码在触发后抛出 UnauthorizeAccessException 异常,“访问路径 'C:\temp' 被拒绝”。
Everyone 的文件和目录都具有完全访问权限。
另外,后台任务可以做什么access/run?我正在尝试 运行 在现代待机中执行后台任务,并让它读取一些寄存器 and/or 运行 另一个工具。在现代待机状态下这甚至可能吗?
这是我尝试这样做的代码:
后台任务:
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();
}
}
}
你不能这样做,问题不在于 BackgroundTask。在 UWP 应用程序中,您不能在硬盘上写入。您可以读取和写入的唯一位置是使用 ApplicationData.Current(LocalCacheFolder、LocalFolder 等)或用户使用 SaveFilePicker 明确选择的任何文件夹。
此外,您需要使用此语法(Intellisense 建议您使用 class 文件,但在 UWP 中实际上不可用)
FileIO.ReadTextAsync(StorageFile file);
我一直在尝试在 Win10 上编写一个 C# 应用程序,它只有 运行 一个写入文件的后台任务。
运行 下面的代码在触发后抛出 UnauthorizeAccessException 异常,“访问路径 'C:\temp' 被拒绝”。 Everyone 的文件和目录都具有完全访问权限。
另外,后台任务可以做什么access/run?我正在尝试 运行 在现代待机中执行后台任务,并让它读取一些寄存器 and/or 运行 另一个工具。在现代待机状态下这甚至可能吗?
这是我尝试这样做的代码:
后台任务:
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();
}
}
}
你不能这样做,问题不在于 BackgroundTask。在 UWP 应用程序中,您不能在硬盘上写入。您可以读取和写入的唯一位置是使用 ApplicationData.Current(LocalCacheFolder、LocalFolder 等)或用户使用 SaveFilePicker 明确选择的任何文件夹。
此外,您需要使用此语法(Intellisense 建议您使用 class 文件,但在 UWP 中实际上不可用)
FileIO.ReadTextAsync(StorageFile file);