【问题标题】:WPF Desktop Bridge out-of-process background task cannot access Documents folderWPF 桌面桥进程外后台任务无法访问 Documents 文件夹
【发布时间】: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


【解决方案1】:

WPF 桌面桥进程外后台任务无法访问 Documents 文件夹

在测试过程中,它可以在我的环境(操作系统版本 2004)的后台任务中成功创建 text.bgtxt 文件。该问题已在最新的操作系统版本中得到解决。请尝试将您的操作系统更新到最新版本。

主要问题是尚未有多少用户迁移到 2004 版(我的应用在 1809-1909 有很多用户)。

我尝试在添加图片库功能后在图片库中制作文件夹,它可以工作。所以目前的解决方法是使用图片库来替换文档库。

【讨论】:

    猜你喜欢
    • 2018-03-12
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2014-11-17
    • 2015-01-09
    • 2021-11-04
    相关资源
    最近更新 更多