【问题标题】:Access is denied despite using broadFileSystemAccess尽管使用了 broadFileSystemAccess,但访问被拒绝
【发布时间】:2019-10-02 21:52:08
【问题描述】:

UWP 杀了我.....

计算机崩溃后,我不得不重新安装 VisualStudio2017。而现在,我在崩溃前运行良好的应用程序拒绝运行。

按照 MS 文档中的说明,我一直在使用 Package Manifest 中的 broadFileSystemAccess 功能:

 xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
 IgnorableNamespaces="rescap uap mp desktop4 iot2">

和

<Capabilities>
<rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>

这没问题,但现在我得到一个带下划线的 rescap:Capability 和编译警告“命名空间 'http://schemas.microsoft.com/appx/manifest/foundation/windows10' 中的元素 'Capabilities' 在命名空间中有无效的子元素 'Capability' ......

因为它是一个警告,所以它编译时没有任何问题。但是,如果没有此清单代码,应用程序将无法访问文件(访问被拒绝)。

我不敢说坏话....有人知道是什么原因造成的吗?这是一个全新的 VS2017 安装。

谢谢!

【问题讨论】:

  • 你在安装后安装了所有的VS更新吗?
  • 首先,打开设置 -> 隐私 -> 文件系统访问权限(类似的东西),并检查您是否没有以某种方式被拒绝访问。
  • jdweng 是的,我做到了。 Mailosz 这台计算机上的其他应用程序可以毫无问题地访问文件系统。 (包括 uwp 应用)
  • 好的。部署应用程序,右键单击其徽标,选择更多,然后选择“应用程序设置”。那里有一个文件系统的开/关。将其切换为“开”,因为它默认为“关”,鲍勃是我的叔叔.....会不会是 2018 年秋季的更新?默认情况下如何以编程方式打开它?
  • @nam 我暂时解决它的方法是右键单击应用程序,选择更多然后 AppSettings 并在 AppsPermissions 中启用“文件系统”。真的很麻烦也很无奈。我真的开始放弃 UWP,因为周围还有很多其他人。我不明白为什么微软坚持让简单的事情变得复杂或不可能。祝你好运!

标签: c# uwp manifest


【解决方案1】:

好的,这是我的一些发现。

1.应用程序不得同时声明 broadFileSystemAccess 和其他三个文件系统功能中的任何一个。 (图片、文档、下载)

来源:https://social.msdn.microsoft.com/Forums/windowsapps/en-US/415d02da-eeb6-45b3-b6e2-946b124d14b0/broadfilesystemaccess-issue?forum=wpdevelop

2。这仅适用于 storageFile api 而不是 File.Exists etc api

来源:https://docs.microsoft.com/en-gb/windows/uwp/packaging/app-capability-declarations

3.确保与其他两个答案一样启用了 fileAccess:

来源:https://stackoverflow.com/a/57703368/2987066

4.我还发现,每次我开始调试(并且代码已更改)时,我都需要再次打开和关闭该设置才能使其正常工作

来源:通过反复试验令人沮丧地调试应用程序

感谢 microsoft 提供的出色开发环境,它确实显示了开发人员对开发您的应用程序的热爱程度,因为与您的竞争对手相比,您的商店非常繁荣......哦等等......

【讨论】:

    【解决方案2】:

    感谢您报告此问题。这是 1809 年的一个已知问题。相关团队正在努力解决。

    Clint Rutkas 已在此线程上回复:No user-consent prompt on first run of broadFileSystemAccess-capable UWP app。

    他建议我们可以使用try/catch 来捕捉这种情况:

    try
    {
        StorageFile storageFile = await StorageFile.GetFileFromPathAsync(@"E:\Foo");
    }
    catch (Exception)
    {
        // prompt user for what action they should do then launch below
        // suggestion could be a message prompt
        await Launcher.LaunchUriAsync(new Uri("ms-settings:appsfeatures-app"));
    }
    

    【讨论】:

    • UWP 强制开发人员在我们使用文件系统的方式上要严格和明确,但是当我们按照规则和已发布的文档进行操作时,还是不行。这张图怎么了?
    • 它在过去被称为磁盘操作系统是有原因的......它对于操作机器来说有点核心......
    • 1 年过去了,仍然没有修复。感谢微软
    【解决方案3】:

    您还需要在“设置”中允许您的应用访问文件系统。这是一项安全措施,因此机器用户确认您的应用可以在受控访问之外访问它运行的 UWP 应用容器提供的文件。

    【讨论】:

    • 嗯......让我们看看这个......谢谢。我仍然不明白为什么微软在 UWP 中以这种方式锁定所有内容,而 WPF 允许您毫无问题地访问文件。如果他们这样做是为了安全,而我是一名黑客,我会改为在 WPF 中开发......有什么意义!它们使 UWP 的一切变得不必要地复杂化。最终结果,例如,在他们实施 UWP 的 VR 环境中:人们使用 Steam 而不是他们自己的混合现实环境进行开发。
    • UWP 在容器内运行;严格控制的沙箱。 WPF 没有。容器对操作系统更加友好,因为它们为用户提供了更多保护,免受恶意应用程序的侵害,并支持高级安装管理方案(请参阅 MSIX)。不幸的是,它对开发人员提出了更高的要求。
    • 至于黑客用例,是的,你会使用 WPF 而不是 UWP。然而,在遥远的未来,甚至您的 WPF 也将打包在 MSIX 安装中,这会强制您进入 MSIX 应用容器。对于广泛的文件访问,您也会遇到同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多