【发布时间】:2021-01-29 22:02:12
【问题描述】:
我正在开发一个 WPF(桌面桥)应用程序,该应用程序在启动时和进程外后台任务中执行一些逻辑。此逻辑在用户的 Documents 文件夹中创建并使用一个文件。
我根据微软开发者博客上的文章在 WPF(桌面桥)应用程序中创建了进程外 BG 任务:Link
为了使用 Documents 文件夹,我在 Package 项目的清单中添加了相应的权限:
<Capabilities>
<uap:Capability Name="documentsLibrary" />
</Capabilities>
此外,我还为要在 Documents 文件夹中创建和打开的文件类型添加了文件类型关联权限,并添加了具有常规/系统事件任务类型的后台任务声明。
但是很遗憾,在BG任务中调用KnownFolders.DocumentsLibrary.CreateFolderAsync("SubfolderName", CreationCollisionOption.OpenIfExists)方法导致异常:Access is denied.。
堆栈跟踪:
at Windows.Storage.KnownFolders.get_DocumentsLibrary()
at *...
WPF应用代码中相同逻辑的调用成功。向 BackgroundTaskWrapper (UWP) 项目添加相同的权限并不能解决问题。
任务仅在 Windows 2004 上正常运行。它不适用于以前版本的 Windows:1909、1903、1809、1709(由于项目的目标版本,未在旧版本上测试)。
示例:Github
【问题讨论】:
-
在测试过程中,它可以在我的环境(操作系统版本2004)的后台任务中成功创建
text.bgtxt文件。所以问题只出现在旧系统版本吧? -
@NicoZhu-MSFT 没错,这种行为在 2004 年以前的 Win 版本中重现。在 2004 年本身一切正常。
-
可能问题在2004版中已修复,请尝试将您的操作系统更新到最新版本,或使用应用程序的本地文件夹替换documentsLibrary。您是否尝试过将文件类型权限和documentsLibrary 全部放在BackgroundTaskWrapper Package.appxmanifest 中?
-
@NicoZhu-MSFT 主要问题是没有多少用户迁移到 2004 版(我的应用程序在 1809-1909 上有很多用户)。此外,本地文件夹和发布者文件夹都不适合我,因为我需要一个可供所有应用程序使用的文件夹。正如我在问题中所说,将这两个权限添加到 Wrapper 项目的清单并不能解决问题。
-
添加图片库能力后尝试在图片库中制作文件夹,成功了,可以用图片库代替吗?
标签: wpf background-task desktop-bridge appxmanifest out-of-process