我正在创建一个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;工作。
答案 0 :(得分:2)
UWP应用程序在应用程序容器中运行(低完整性进程),此进程无法完全访问漫游文件夹。默认情况下,它可以访问应用程序数据包文件夹“C:\ Users {user} \ AppData \ Local \ Packages {Package family name}”。
外部进程在不知道软件包系列名称的情况下访问此文件夹有点困难。您可以从Visual Studio Packaging属性中获取它。
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");
}