Starward icon indicating copy to clipboard operation
Starward copied to clipboard

[Bug] Defender的“文件夹限制访问”有概率会导致软件不能访问数据库,并且没有任何的回滚提示

Open 0xeeeeeeeeeeee opened this issue 9 months ago • 1 comments

Checklist

  • [x] My issue was not mentioned by others, and it is not a duplicate issue.

Description

把Starward的数据库文件放到比如文档目录等默认被“文件夹限制访问”并且启用该功能,有一定概率会导致启动时不能加载数据库,呈现出未初始化,没有添加任何游戏的界面,且软件内并没有任何的提示

Image

Reproduction Steps

把Starward的数据库文件放到比如文档目录等默认被“文件夹限制访问”并且再defender里启用该功能,再启动软件 (此方法不一定有效)

替代方法:修改“StarwardDatabase.db”的访问权限设置到没人能够读写,也会体现出差不多的效果(文件夹限制访问的原理就是返回没有权限读写来阻止)

Expected Behavior

被初始化了,就像第一次打开一样,并且没有任何的额外提示

Image

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

建议的解决方法:添加回滚机制,检测到访问失败之后弹框提示 补充一个事件日志:

Image

我发现这个操作是写入导致的,比如这样:

Image

因此可以这么做回滚:

//这里是初始化数据库的代码
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)
{
    //走常规异常处理的流程
    //...
}

0xeeeeeeeeeeee avatar May 25 '25 16:05 0xeeeeeeeeeeee

感谢反馈,你提供了一个非常重要的信息

Scighost avatar Jun 11 '25 14:06 Scighost