我通过Windows应用商店向自己分发了xaf Winforms + Desktop Bridge应用程序。
我想从博客中预生成ModelAssembly.dll,Model.Cache.xafml和ModulesVersionInfo文件,并将它们打包到输出目录中。
这些文件由XAF生成(如果尚不存在)。
输出目录由
指定Path.GetDirectoryName(GetType().Assembly.Location)
当我从商店安装并运行我的应用程序时。我收到此错误消息。
Access to the path 'C:\Program Files\WindowsApps\JobTalk.JobTalk_1.0.19.0_x64__8kpaqbvntb9aj\SBD.JobTalk.Workflow.Win10\ModelAssembly.dll' is denied.
在代码中,我尝试查找Path.GetRelativePath形式,但是在Framework 4.7.2中不可用
答案 0 :(得分:2)
简而言之,UWP应用程序不允许通过绝对路径访问文件。因为UWP应用程序在沙箱中运行,并且只能从应用程序容器中访问文件。在大多数情况下,UWP应用只能直接访问其安装文件夹和应用数据文件夹。由于转换后的应用程序也是UWP应用程序,因此您的应用程序需要遵循此规则。
请检查Prepare to package a desktop application。该文档提到了一些与您的问题有关的方案。
您的应用程序写入AppData文件夹或注册表,目的是与另一个应用程序共享数据。转换后,AppData将重定向到本地应用程序数据存储,该存储是每个UWP应用程序的专用存储。
您的应用程序将写入您应用程序的安装目录。例如,您的应用程序将写入与exe放在同一目录中的日志文件。不支持此功能,因此您需要查找其他位置,例如本地应用程序数据存储。
在这里,有一种特殊情况,您可以通过文件绝对路径访问文件。这是一个受限制的功能,称为 broadFileSystemAccess 。一旦添加了broadFileSystemAccess
功能,就可以使用Windows.Storage名称空间中的API来获取用户有权访问的所有文件。请阅读File access permissions了解更多信息。
请注意,文档已说明:
如果您向应用商店提交了声明此功能的应用程序,则需要提供其他说明,说明您的应用程序需要此功能的原因以及打算如何使用它。
答案 1 :(得分:0)
Xavier的答案解释了出了什么问题。它在我的项目中发生的原因是我错过了将链接文件标记为“如果更新则复制”的步骤