Starward
Starward copied to clipboard
[Bug] Defender的“文件夹限制访问”有概率会导致软件不能访问数据库,并且没有任何的回滚提示
Checklist
- [x] My issue was not mentioned by others, and it is not a duplicate issue.
Description
把Starward的数据库文件放到比如文档目录等默认被“文件夹限制访问”并且启用该功能,有一定概率会导致启动时不能加载数据库,呈现出未初始化,没有添加任何游戏的界面,且软件内并没有任何的提示
Reproduction Steps
把Starward的数据库文件放到比如文档目录等默认被“文件夹限制访问”并且再defender里启用该功能,再启动软件 (此方法不一定有效)
替代方法:修改“StarwardDatabase.db”的访问权限设置到没人能够读写,也会体现出差不多的效果(文件夹限制访问的原理就是返回没有权限读写来阻止)
Expected Behavior
被初始化了,就像第一次打开一样,并且没有任何的额外提示
Screenshots
No response
Starward Version
v0.14.4
Windows Version
10.0.26100.0
Log
[23:41:27.464] [INFO] [Starward.exe (48680)] Welcome to Starward v0.14.4 System: Microsoft Windows NT 10.0.26100.0 Command Line: D:\azert\Documents\Starward\app-0.14.4\Starward.dll
Additional Context
建议的解决方法:添加回滚机制,检测到访问失败之后弹框提示 补充一个事件日志:
我发现这个操作是写入导致的,比如这样:
因此可以这么做回滚:
//这里是初始化数据库的代码
try
{
var path = "c:\users\example\documents\starward\StarwardDatabase.db" //假设路径是这个
if (!File.Exists(path)) NewDB(); //创建一个新的数据库
var db = OpenDB(path);
db.WriteValue("example","example");//随便写入什么都行
//这里开始数据库是可以安全读写的了
//...
}
catch (UnauthorizedAccessException ex)
{
Message("不能访问数据库,请尝试关闭windows defender的 ”文件夹限制访问“"); //示例弹窗方法
//...
}
catch (Exception ex)
{
//走常规异常处理的流程
//...
}
感谢反馈,你提供了一个非常重要的信息