Releases: starnotes-xj/FaceWinUnlock-Tauri
Release list
v0.5.10
@
完整更新日志:v0.5.9 → v0.5.10
🔒 WebAuthn/Passkey 不触发人脸(三层防线)
DLL 侧(分类 + debounce):
- 枚举事件 2250/2251 提前检测:弹窗前 1-2s,5s 窗口
ready-monitor需配合标题关键词:无关键词时保守返回 MonitorUnavailable,不假定为密码填充- 发 "run" 前 500ms debounce 轮询
is_webauthn_guard_active() - 发 "run" 紧前面加第二道 guard 复查,关闭 ~20ms 竞态
- broker 场景 hook 武装前多重 WebAuthn 复查(prepare 前后 + 循环内)
EXE 侧(事件监视 + 渲染):
- EVENT_QUERY XPath 格式修复:channel 路径不再嵌入查询,恢复
*[...]格式 - 2250 枚举事件渲染回退:缺失 TransactionId 时用最小 2 字段渲染,单事件失败不丢弃整批
- 近期枚举(5s TTL)计入
active_count - Condvar missed-wakeup 竞态修复
- broker_guard_prewarm_blocked 在 DLL 断开时清除
🔒 自动锁屏不误锁
- 当场检测:15 帧硬循环 → 10s deadline +
not_face_delay+ 传感器预热重试
⚡ Win+L 秒解锁
power_resume_requires_run在!is_camera_blocked()时释放预热抑制- prewarm_session_gate 配合 credential client 状态正确恢复
🌙 Modern Standby 摄像头阻断
- GUID_CONSOLE_DISPLAY_STATE 监听:屏幕关闭即阻断,不等待 PBT_APMSUSPEND
- 所有摄像头路径统一用
is_camera_blocked()(suspend + display 双重条件)
🧹 凭据清理完善
- KSP 私钥 + credentials.dat 元数据 + 包外备份 + PurgeRequested.flag
- 插件启动时检测 flag → DeleteAllPluginCredentials + ResetLocalCredentialsStore
- AppListBackup 磁贴清理:reg.exe 原始解析二进制值,空键删除
📊 仪表盘
- faceCount 改为响应式 computed
- 今日识别 3s 轮询刷新
- facesStore init() 幂等化(faceList 先清空再填充)
- passkey 版本号移出轮询循环
🛠 安装/部署
- NSIS CopyFiles 去 /SILENT,失败回退 REBOOTOK,关键文件复制失败弹窗报错
- install.log 审计日志(INSTLOG 宏)
- opencv/Server 部署:复制成功才删 resources 副本,禁止静默失败
- 日志 5MB 自动截断(AtomicBool CAS 防重入、UTF-8 边界对齐、后台线程 + TruncationGuard)
- CP DLL 部署后检测重启提示
🧹 CP DLL 残留清理
- NSIS 安装器:清理
.new文件先尝试直接删除,失败再用Delete /REBOOTOK(f040a3a) - 维护页面新增「清理 System32 旧版 DLL 残留(.new)」按钮(
214d81b) cleanup_stale_cp_dll同时清理.bak.old热替换残留文件(4eb863d)
🐛 Bug修复
- 编辑面容保存
targetId→editFaceData.id - EventLog 订阅无匹配 event ID 时不标 unhealthy
- 暂停/恢复状态 event-driven 替代轮询
- 凭据客户端断开时探测定时释放句柄
- 人脸录入模型提前卸载再重加载确保后端一致性
🏗 内部重构
request_auto_lock提取复用open_configured_camera+warm_up_camera统一 cancel 闭包- power_events 3 路状态(suspend + display + blocked)atomically derived
- unlock.log 日志截断不阻塞调用线程
完整对比: v0.5.9...v0.5.10
@
v0.5.9
v0.5.9 正式版
主要修复
- 修复未录入/未启用人脸时锁屏仍预热摄像头,以及手动输入 PIN/密码解锁后旧凭据会话在同一秒重新点亮摄像头的问题。释放后会等待凭据会话真正切换,下一次锁屏或显式识别仍可正常恢复。
- 优化面容录入启动:进入录入页即后台加载模型并让后台服务提前释放摄像头;模型构建不再占用全局摄像头状态锁。实体摄像头连续取得 3 个有效帧即可结束预热,虚拟摄像头仍保留最多 10 帧兼容回退。
- #26 休眠唤醒后 LogonUI 卡死和摄像头延迟释放; #27 自动锁屏失败却误报成功,这两个问题我本地已经修复,但是发现了其他问题,打算在下个版本一起修复完发布
- 完成无 UIA 的 CredUI 分类:WebAuthn/Passkey/security key/FIDO2/设置 PIN 明确跳过通用 Provider;Chrome/Edge 查看与填充密码在健康守卫下使用人脸,失败安全回退 Windows 原生流程。填充密码的时候可以使用人脸识别了
- 修复 Passkey 卸载残留和第三方卸载清理备份的问题,备份迁移到 ProgramData;保留专用 Passkey 插件的人脸授权与 PIN 设置、修改、删除、重建流程。
- 彻底移除 UIA、自动 PIN 键盘注入和解锁动画运行代码。
验证
- Unlock 单元测试:45 项通过
- Credential Provider 分类测试:9 项通过
- Tauri 后端检查与前端生产构建通过
- GitHub Actions 完成 Rust 核心、Passkey MSIX、运行库暂存、Tauri/NSIS 和更新清单的正式构建与校验
完整改动: v0.5.8...v0.5.9
v0.5.8
What's Changed
- v0.5.8: 面容管理提速 + UI 未响应修复 + 摄像头真实设备名(#17) + passkey 卸载兜底 by @starnotes-xj in #24
Full Changelog: v0.5.7...v0.5.8
v0.5.7
What's Changed
- fix(enroll): 多尺度检测修复近景大脸照片导入漏检 (#20) by @starnotes-xj in #23
Full Changelog: v0.5.6...v0.5.7
v0.5.6
What's Changed
- docs: 补全 v0.5.5 changelog(秒解锁/自动锁屏/一致性验证等) by @starnotes-xj in #21
- fix: 摄像头 MSMF 打开慢(Win10 40s)致秒解锁失效 + 录入图片导入修复 (#3 #20) by @starnotes-xj in #22
Full Changelog: v0.5.5...v0.5.6
v0.5.5
FaceWinUnlock-Tauri v0.5.5
移除解锁动画、杀软误删自愈、秒解锁、稳定性加固。建议先彻底卸载旧版再全新安装。
✨ 主要更新
🎬 彻底移除 Windows Hello 风格解锁动画(#3 #14 #15 #16 #17)
删除 DComp/D2D/D3D11/DWrite 图形管线、动画帧资源与注册表开关,Credential Provider DLL 不再静态或动态依赖图形库。旧 Win10 LogonUI 加载失败、锁屏闪烁、睡眠唤醒后卡转圈等问题从根上规避;锁屏界面保留轻量文字状态提示。
⚡ 秒解锁:锁屏预热摄像头
锁屏出现后即在后台预开摄像头(MSMF 打开约 2–3 秒是硬件下限),动一下鼠标触发识别时摄像头已就绪、近乎瞬时完成比对,免去每次等 2–3 秒。空闲 45 秒自动释放关灯;预热打开失败(摄像头被占用/不存在)即抑制重试、有关闭/释放请求时避让。
🎥 修复 Win10 触发识别后摄像头约 40 秒才打开
解锁端摄像头后端改回与录入端一致的 MSMF → DShow → Any 顺序,并记录各后端打开耗时,避免 DShow-first 特征不一致,也避开 CAP_ANY 长阻塞。
🔒 自动锁屏修复
- 修复「启用了却没效果」:开关此前需再点保存才写库,现拨动即时生效
- 屏幕已锁时跳过复查,避免与摄像头预热抢占、避免对已锁屏重复锁定
🧩 录入一致性验证收尾(#12)
切换推理后端后报「模型未加载」→ 幂等重载;点「返回 / 确认更改」离开页面即停验证并关摄像头;从摄像头重新拍摄后可正常保存。
🔑 Passkey 插件
- 修复卸载主程序后 Passkey 管理器残留(#17):卸载时先备份各用户
credentials.dat,再用Remove-AppxPackage -AllUsers移除 - 卸载重装凭据恢复兜底:查询插件状态时主动备份,第三方工具(如 Geek)卸载后重装可从备份恢复元数据
- 修复插件已安装却显示「未安装」
🛡️ 运行时文件被杀软误删自愈
安装时将 opencv_world4120.dll 与 FaceWinUnlock-Server.exe 打成压缩备份,注册 FaceWinUnlockHealer 计划任务(开机 / 登录 / 每 15 分钟检测缺失即恢复并拉起服务),缓解火绒 / Defender 误删无签名运行时导致的「找不到 opencv_world4120.dll」。安装器也会尝试加入 Windows Defender 排除。
🔔 其它
- 更新提示新增「前往下载」按钮,一键打开 Release 页
⚠️ 杀毒软件误删提示
opencv_world4120.dll(OpenCV 运行库)与 FaceWinUnlock-Server.exe(后台人脸服务)目前无数字签名,部分杀软(火绒、Windows Defender 等)可能误判删除,表现为「用一两天后启动报找不到 opencv_world4120.dll」。v0.5.5 起已内置压缩备份 + 自愈计划任务,并尝试加入 Defender 排除;若使用火绒等第三方杀软,请手动把安装目录加入信任区 / 白名单。
📦 下载
下载 facewinunlock-tauri_0.5.5_x64-setup.exe 安装即可(已内置 OpenCV / OpenVINO 运行时)。其余资产为更新机制 / 插件文件,自动管理,一般无需手动下载。
What's Changed
- Remove unlock animation and prepare v0.5.5 fixes by @starnotes-xj in #19
Full Changelog: v0.5.4...v0.5.5
v0.5.4
v0.5.4
🐛 修复 Win10 锁屏不自动解锁(issue #3)
同一份程序 Win11 能 Win+L 解锁、Win10 不行(登录磁贴出现、圆圈一直转、摄像头亮但不登录)。根因:v0.5.3 为启动提速把解锁端摄像头后端改成 DShow 优先,而录入端用 CAP_ANY(Windows 上通常解析到 MSMF);DShow 与 MSMF 帧的色彩/曝光/分辨率差异使同一张脸 SFace 特征偏移、余弦相似度跌破阈值 → 检测到脸但匹配不上。Win11 上两后端帧恰好接近掩盖了问题,Win10 暴露。修复:解锁端改回 CAP_ANY 优先,与录入端同一特征空间。
✨ Passkey:清理残留私钥 + 简化插件删除 UI(issue #3)
- 「首选项 → 系统集成」新增「清理残留私钥」:插件「清空/删除」只删元数据、不删 KSP 私钥(残留在
%APPDATA%\Microsoft\Crypto\Keys),现可一键清除facewinunlock/*残留私钥(certutil -delkey已补-csp,确实生效)。 - 插件删除菜单精简为「删除所选通行密钥」「清空全部通行密钥」两项,隐藏调试用细分项。
🔧 彻底根治「插件 UI 改了但更新推不动」
插件 MSIX 清单版本此前写死、CI 不同步,插件 UI/代码改动因包版本不变而无法通过应用内「更新」推送给已安装用户。现 MSIX 清单版本随发布 tag 在构建前自动同步(本版 0.5.4.0),点「更新」即可拿到新插件、无需卸载重装(也避免了 -PreserveApplicationData 卸载的 0x80073CFA)。
🔧 修复「检查更新」点击不跳转下载页
更新通知点击改用 Tauri opener 打开发布页(此前 window.open 在应用内 webview 被拦截、点击无反应)。
完整更新记录见 README。
v0.5.3
v0.5.3
延续 issue #3 的后续修复与优化。
🔑 Passkey(通行密钥)
- 卸载默认保留通行密钥:卸载 / 全量更新 / 重装后无需在各网站重新注册。私钥本就保存在 Microsoft Software KSP(per-user,不随插件卸载删除);本版起凭据元数据也通过
Remove-AppxPackage -PreserveApplicationData保留,并额外做包外备份/恢复兜底。 - 卸载时提供 「保留密钥」/「彻底清除」 两个选项;核心组件卸载与整包(NSIS)卸载默认保留。
⚠️ 该功能需在 Windows 11 24H2 + 已注册过站点 passkey 的真机上验证「卸载重装免重新注册」。
⚡ GPU 推理后端(OpenCL / OpenCL FP16)
- kernel tuning 缓存优化:启动时设置
OPENCV_OCL4DNN_CONFIG_PATH持久化 OpenCL auto-tuning 结果,消除「每次解锁都重新编译 kernel(约 90 秒)」,改为只首次慢、之后秒级。 - 实验性警告:切换到 GPU 后端时明确提示——部分显卡上识别会很慢甚至匹配不上(锁屏转圈、一致性检查黑屏),遇到异常请改回 CPU(兼容性最好)。
- 注:缓存只解决「慢」;若显卡 FP16 精度不足导致「匹配不上」,仍需改回 CPU。
🐛 修复
- 更新检查反复提示:修复「已是最新版仍提示有更新」——更新检查用的版本号(
Cargo.toml)此前漏随发版同步;现 CI 从 tag 自动同步安装包与更新检查两处版本号。 - 首选项卡顿:修复初次打开「首选项 → 软件配置」明显卡顿——启动时多个外部进程查询(计划任务 / 命名管道 /
Get-AppxPackage)与界面渲染争抢,已错开延迟加载。
🧹 工程
- 清理 Rust 编译警告(Server / Unlock / UI 共约 42 个降至 1 个)。
完整对比:v0.5.2...v0.5.3