Windows下.NET Maui Blazor WASM移除runFullTrust后访问SQLite权限问题
问题分析与解决方案
错误根源
在Partial Trust模式下,Windows应用沙箱会严格限制文件访问范围:应用仅能访问专属的隔离存储目录(比如LocalFolder,对应.NET MAUI中的FileSystem.AppDataDirectory),而你通过Path.GetFullPath("..", FileSystem.AppDataDirectory)试图跳转至包的根目录(C:\Users\me\AppData\Local\Packages\company.app_ns00xv7ymf8n4),这个操作超出了沙箱允许的权限边界,因此被拒绝。
直接解决方案:修改数据库存储路径
FileSystem.AppDataDirectory本身就是沙箱授权的安全读写目录,无需向上跳转路径。直接使用该目录作为数据库的基础路径即可:
var basePath = FileSystem.AppDataDirectory; // 拼接数据库文件名示例 var dbPath = Path.Combine(basePath, "your_database.db");
这种方式不需要额外配置权限,Partial Trust模式下可直接正常访问。
若需存储到其他位置的处理方式
如果必须将数据库放在非隔离存储目录(比如Documents库),需遵循以下规则:
- 确保已声明对应权限:你当前的清单中已经添加了
documentsLibrary权限,这一步没问题。 - 使用WinRT Storage API访问:沙箱环境下
System.IO的访问范围受限,需通过Windows原生的存储API获取授权目录:
注:若使用// 示例:获取Documents库并创建/打开数据库文件 var documentsFolder = Windows.Storage.KnownFolders.DocumentsLibrary; var dbFile = await documentsFolder.CreateFileAsync("your_database.db", Windows.Storage.CreationCollisionOption.OpenIfExists); var dbPath = dbFile.Path;documentsLibrary,部分场景下需要在Package.appxmanifest中添加对应文件类型的关联(比如.db),否则可能出现访问异常。
权限补充说明
你当前的权限清单已经覆盖了必要的资源访问权限,针对应用私有存储(FileSystem.AppDataDirectory)无需额外添加Capability,Partial Trust模式下默认拥有读写权限。
内容的提问来源于stack exchange,提问作者Brett Peake
相关产品推荐
相关产品推荐

