单文件 Rust 工具,替代《星塔旅人》PC 客户端(bilibili 联运渠道,内部代号 NOVA / xtlr_bilibili)的官方启动器。
只做三件事:把游戏本体的登录凭证搬出 %TEMP%、直接启动本体、以及告诉你现在到底有没有可复用的登录票。
以下每条都是官方启动器做不到、或者做错的事:
- 🔑 凭证不再被清掉:B 站 SDK 把登录票写在
GetTempPath()\gamecache_*下,Windows 存储感知会随时清理它——"过几天要重登"其实是缓存丢失,不是凭据到期(客户端二进制里没有任何 TTL 常量)。本工具给游戏进程单独设TMP/TEMP,把整个目录挪到不会被清理的地方 - 🛡️ 不再被自己的启动器拉起来:本体启动时会派生
"...\StellaSora Game\AntiCheatExpert\ACE-Helper.exe",路径没加引号,目录名里的空格把命令行截断后正好命中同目录的官方启动器。本工具在游戏运行期间以独占句柄按住它,或把它改名禁用 - 📦 凭证目录可迁移:一键把现有
gamecache_*复制到你指定的目录并立刻改用。是复制不是移动,填错只损失一点磁盘;历史目录会被记住,换回系统 TEMP 后也找得到那张票 - 💾 下载前先算账:只读比对包版本,并按「下载 + 解包 + 2 GiB 余量」预检磁盘。官方那种朴素算法会在"余 0.40 GiB"时放行,然后在下到一半写满盘;空间不够时这里下载按钮根本不渲染
- ⏬ 断点续传:依赖 206 与
Content-Range续传(GET 的 206 不带Accept-Ranges),包落在游戏目录旁而不是%TEMP%;差分包版本不适用时据实标"版本不匹配",而不是让用户白下 5.5 GiB - 📂 解包先看计划:只读压缩包目录,报告条目数、顶层结构与会写到哪里。真正写入默认关闭,要过配置开关 + 面板二次确认两道闸
- 🪟 一个够用的小面板:760×460 无边框窗口,凭证 / 启动 / 更新 / 日志四页,底部三枚 chip 直接给出登录态、启动器占用与游戏进程状态
- 🔒 可逆:不注入、不改写游戏文件、不碰反作弊。唯一会写游戏目录的动作是"改名禁用",且文件名本身就是状态,一键还原
- 语言:Rust 2021(
rust-version = 1.80) / 纯静态 HTML + CSS + JS - 框架:Tauri 2(Win11 自带 WebView2 运行时,无需额外安装;
bundle.active = false,交付物就是一个 exe) - 依赖:
serde/serde_json(配置)、rusqlite(bundled,只读探account.db)、reqwest(blocking + system-proxy,查版本接口)、md5 - 解包:系统自带
tar.exe(bsdtar / libarchive,实测能读 solid LZMA2 的 7z 容器) - 打包:
opt-level = "s"+ LTO +panic = "abort"+ strip → 约 5.4 MB 单文件
需要 Rust(MSVC 工具链,即 Visual Studio Build Tools 的「使用 C++ 的桌面开发」);前端是纯静态文件,不需要 npm / 打包器。
cd src-tauri
cargo build --release
# 产物:src-tauri\target\release\novalauncher.exe改了 src-tauri/icons/ 下的图标后要 touch src-tauri/build.rs 再编译:tauri-build 不监听 icons/,否则 exe 里嵌的还是旧图标。
日常用法:给 novalauncher.exe --start 建一个快捷方式,替代官方启动器的图标。
- 登录凭证:票在本目录 / 别处 / 已失效一目了然,一键迁移到固定目录,或改回跟随系统
TEMP - 启动:官方启动器处置(不处理/主动占用/改名禁用,三者互斥)、游戏路径、启动参数、面板关闭时机
- 更新:版本检查、磁盘预检、断点续传下载、解包写入计划
- 日志:SDK 日志 / 游戏日志 / 本面板操作记录,同一视图切换
novalauncher.exe 打开面板
novalauncher.exe --start 无界面直接进游戏(进程会一直活着以持有锁)
novalauncher.exe --start --no-wait 启动后立即退出(放弃持锁)
novalauncher.exe --start -- -window-mode borderless -screen-width 1920
-- 之后的参数原样传给 xtlr.exe
novalauncher.exe --migrate D:\MyCache 把现有 gamecache_* 复制进该目录并改用之
novalauncher.exe --status | --config 打印状态 / 解析后的配置 JSON
novalauncher.exe --set-cache-dir D:\Temp --set-game-dir D:\Game --set-launcher D:\L.exe
临时覆盖配置(也会用于本次启动)
novalauncher.exe --set-launcher-mode off|lock|rename
处置官方启动器并写入配置
novalauncher.exe --no-block 本次不处置官方启动器
novalauncher.exe --check-update 查版本接口,打印比对结果 JSON
novalauncher.exe --plan-disk DL UNPACK 预检一个 DL+UNPACK 字节的包需要多少空间
novalauncher.exe --download 下载适用的更新包(可续传)
novalauncher.exe --cancel-download 让正在跑的 --download 停下,保留已下部分
novalauncher.exe --plan-extract 只读压缩包目录,报告写入会发生什么
--set-* 与 --no-block 在任何窗口出现之前生效,所以快捷方式可以直接带配置。
novalauncher.json,就在 exe 旁边(面板里可改路径)。整个文件夹拷走就是全部设置;早期版本放在 %APPDATA%\NovaLauncher\config.json,启动时会自动读一次并搬过来。
{
"game_dir": "D:\\bilibili Game\\StellaSora\\StellaSora Game",
"game_exe": "xtlr.exe",
"official_launcher": "D:\\bilibili Game\\StellaSora\\StellaSora.exe",
"cache_dir": "",
"launcher_mode": "lock",
"allow_update_write": false,
"close_after_start": false,
"game_args": [],
"cache_history": ["D:\\BLGameCache\\Temp"]
}cache_dir 就是"登录凭证放哪",留空表示跟随系统 %TEMP%,也就是官方启动器的原始行为;只有想躲开存储感知清理时才填一个固定目录。launcher_mode 取 off / lock / rename,旧配置里的 block_official_launcher: true/false 仍然读得进去,分别按 lock / off 解释,老配置不用手改。
本 README 文档由 AI 辅助生成。如有问题,请提交 Issue 或与我联系!