.NET 7.0 Web API调试时遇SQLite Error 14:无法打开数据库文件
问题原因
VS 2022调试时,进程默认使用当前登录用户的普通权限,而C:\Windows\System32是系统级保护目录,普通用户账户没有足够的读写权限——即便手动设置了权限,UAC虚拟化机制也可能将文件访问重定向到用户的虚拟存储目录,导致程序找不到实际的database.db文件。而Windows服务通常以Local System账户运行,该账户拥有系统目录的完全操作权限,因此能正常读写数据库。
解决方案
迁移数据库到非系统目录(推荐)
将database.db移动到Web API项目的输出目录、项目根目录,或者其他非系统保护的路径(比如C:\ProgramData\YourApiName),然后更新连接字符串:// 示例:使用项目根目录的相对路径 "ConnectionStrings": { "DefaultConnection": "Data Source=database.db" } // 示例:使用绝对路径 "ConnectionStrings": { "DefaultConnection": "Data Source=C:\\ProgramData\\YourApiName\\database.db" }这种方式符合应用部署的最佳实践,避免权限问题和系统目录的安全风险。
以管理员身份启动VS 2022
右键VS 2022图标,选择「以管理员身份运行」,此时调试进程会获得管理员权限,能够访问C:\Windows\System32下的数据库。但这种方法仅适合临时测试,长期使用会增加权限风险,不建议作为正式解决方案。修改数据库文件权限(不推荐)
右键C:\Windows\System32\database.db→ 「属性」→「安全」,添加当前登录用户并赋予「读取/写入」权限。不过修改系统目录内文件的权限可能破坏系统安全性,仅在特殊场景下临时使用。
内容的提问来源于stack exchange,提问作者MMK
相关产品推荐
相关产品推荐

