UnauthorizedAccessException尝试在手动添加文件后访问uwp发布者缓存

时间:2016-12-20 12:42:27

标签: c# uwp

我有一个使用发布商缓存文件夹的应用。我将一些文件复制到C:\Users\<username>\AppData\Local\Packages\<publisherId>\Folder的相应目录中,现在我正在尝试UnauthorizedAccessException查询文件。

这是我添加到appx-manifest中的内容,就在</Package>之前:

<Extensions>
  <Extension Category="windows.publisherCacheFolders">
    <PublisherCacheFolders>
      <Folder Name="Folder"/>
    </PublisherCacheFolders>
  </Extension>
</Extensions>

但是,我在以下行收到UnauthorizedAccessException

await ApplicationData.Current.GetPublisherCacheFolder("Folder").GetFileAsync(location)

异常详细信息表明异常是从GetFileAsync抛出的,因为它实际上是由内部Awaiter引发的。我究竟做错了什么?当我上周四编写代码时,一切正常。今天,我想展示它并得到这个例外。 appxmanifest中的声明不应该足够,或者我错过了什么?

编辑:我刚注意到我也无法再写入发布商缓存文件夹了。尝试创建一个新的空文件shared.txt,我也得到相同的UnauthorizedAccessException。这可能是发布者证书的问题吗?我正在使用自签名测试证书,我也为用户和本地计算机手动安装。

1 个答案:

答案 0 :(得分:0)

最后,我设法让错误信息消失了。但是,解决方案并不好,如果有人有更好的解决方案,我会非常感激。

  1. 我创建了一个新的应用程序,它基本上像桌面应用程序之前那样进行文件复制,但是在具有相同发布者的uwp应用程序中。虽然这非常痛苦,因为你必须通过文件夹选择器一直要求用户获得许可,但它确实有效。
  2. 我卸载了相关应用,以便Windows删除相应的发布商文件夹。将系统保留在资源管理器或任何其他桌面程序中创建的发布者缓存文件夹后,该应用程序将继续获得UnauthorizedAccessException
  3. 我运行部署应用程序,仅通过UWP API将文件复制到发布者文件夹。在本地部署期间,Windows将重新创建发布者缓存文件夹,以便应用程序可以访问它。
  4. 我运行了原始应用。在混合模式下调试,我得到了一个AccessViolationError,但是那个没有传递给托管代码,所以一切都很好。