如果使用broadFileSystemAccess和runFullTrust,UWP应用程序可以更改另一个应用程序的AppData文件夹中的文件吗?

时间:2019-04-03 13:28:59

标签: c# uwp appx

我有一个C#Windows Form应用程序,其功能(大致)类似于:

  1. OpenFileDialog()<-指向文件路径
  2. File.Exists()<-确认文件路径有效
  3. File.GetLastWriteTime()<-检查文件的上次修改时间
  4. ZipArchive.CreateEntryFromFile()<-如果文件已更改,则创建新的zip

我正在尝试使该应用程序作为UWP应用程序运行。我已经成功地将其编译为APPX,并且可以很好地安装/启动。但是,似乎它处理的所有文件活动都停留在文件系统的缓存/沙盒版本中。

例如:

  • 我在应用中选择了C:\ Temp \ hello.txt(上面的步骤1)
  • 然后我在记事本中修改文本文件,保存并退出
  • 然后我触发我的应用执行步骤3和#4
  • 但是,步骤3声称文件未更改。 这是什么让我认为UWP应用正在查看文件系统的缓存集或沙盒集?还是这里发生了其他奇怪的事情?
  • 此外,如果无论上次修改日期如何我都试图强制应用制作zip文件,则在我检查文件夹时实际上没有创建任何zip文件-再次使我怀疑应用程序是否卡在某些沙箱/缓存中我的文件系统不是实际的文件系统?
  • (新)这里的另一个有趣线索是,如果我将Windows资源管理器窗口打开到C:\ Temp,则可以自己看到我的hello.txt文件。如果在UWP应用中打开C:\ Temp的openFileDialog(),则可以看到我的hello.txt文件和它创建的hello.zip文件。因此,两个窗口都使用C:\ Temp,但是它们显示不同的文件!

其他说明:

  • 正在通过桌面网桥(makeappx.exe)创建UWP应用
  • 我的AppManifest.xml确实声明了适当的broadFileSystemAccess和runFullTrust功能。
  • 我已在Windows 10的“文件系统隐私设置”对话框中将应用程序设置为允许文件系统访问。
  • 作为类* .exe(不是UWP / Appx)运行时,该应用程序运行正常。

1 个答案:

答案 0 :(得分:1)

桌面网桥捕获并将文件写入重定向到该软件包的一部分文件夹中。您可以在the official docs中了解有关此内容的更多信息。目的是允许操作系统在卸载应用程序时清理这些文件。

但是,只要用户有权访问该文件夹,您就应该能够写出不属于软件包的文件夹,然后您应该能够在文件资源管理器中看到该实际文件夹中的文件。