【发布时间】:2021-07-10 12:33:20
【问题描述】:
我有一个包含桌面桥包项目的 WPF 应用程序。 WPF 项目安装了 nuget Microsoft.Windows.SDK.Contracts。 在 package.appxmanifest 我添加了适当的权限:
<Extensions>
<Extension Category="windows.publisherCacheFolders">
<PublisherCacheFolders>
<Folder Name="SomeFolder" />
</PublisherCacheFolders>
</Extension>
</Extensions>
我想在属于一个发布者的多个 WPF 和 UWP 应用程序之间共享一些信息。 我调用 Windows 运行时 API:
var folder = Windows.Storage.ApplicationData.Current.GetPublisherCacheFolder("SomeFolder");
var file = await folder.CreateFileAsync("SomeFile", CreationCollisionOption.OpenIfExists);
我得到 System.UnauthorizedAccessException: 'Access is denied.
无法访问指定的文件或文件夹 (C:\Users
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
在 GetPublisherFolderWPF.MainWindow.
文件夹 5w92pj7ar334m 和 SomeFolder 是在部署此应用程序后创建的,并且文件 SomeFile 也是以零大小创建的。
这发生在 Windows 2004 和 20H2 上。在早期版本的 Windows 10 上,此代码运行良好。
【问题讨论】:
-
当我使用 OpenIfExists 或 ReplaceExisting 作为参数时,我可以重现您的问题。您可以尝试使用
CreationCollisionOption.GenerateUniqueName来代替,如果文件夹已经存在,它会自动在指定名称的基础上附加一个数字。 -
使用
CreationCollisionOption.GenerateUniqueName,它会创建一个文件并可以将数据写入文件,但之后它甚至无法从文件await folder.GetFileAsync("SomeFile")中读取数据,同样的例外:UnauthorizedAccessException: 'Access is denied.
标签: c# wpf windows-runtime desktop-bridge appxmanifest