三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

为什么装完 Mod 空洞骑士就闪退?用 Scarab 做这 6 步排查就够了

为什么装完 Mod 空洞骑士就闪退?用 Scarab 做这 6 步排查就够了

为什么装完 Mod 空洞骑士就闪退?用 Scarab 做这 6 步排查就够了

【免费下载链接】ScarabAn installer for Hollow Knight mods written with Avalonia.项目地址: https://gitcode.com/gh_mirrors/sc/Scarab

你装上心仪已久的 Mod,游戏却启动即闪退——Steam 显示"正在运行",窗口却迟迟不出现。这是《空洞骑士》模组玩家最常撞上的坑。Scarab 是一款用 Avalonia 写成的空洞骑士模组安装器,帮你把社区 Mod 装进游戏、管理启停与依赖;本文就围绕它,把这类崩溃问题拆成 6 个可执行的排查动作。

想省时间的话,直接看下面这张"对号入座"表,找到你的现象,跳到对应步骤就行。

你看到的现象大概率的问题先做哪一步
启动即闪退,没有任何提示Mod API 与游戏版本对不上第 1 步:核对版本与 API
工具提示找不到游戏目录、无法写入路径探测失败或目录权限不足第 2 步:检查目录与配置
装了 Mod,进游戏却毫无变化依赖缺失,或安装顺序不对第 3 步:理顺安装顺序
游戏能进,但某几个 Mod 行为诡异Mod 之间互相冲突第 4 步:排除法锁定真凶
换系统、换启动方式后全部失效平台变化导致链接不匹配第 5 步:处理平台切换
下载报错、文件校验失败网络波动或文件不完整第 6 步:看懂报错信息

第 1 步:核对"地基"——Mod API 与游戏版本必须对齐

空洞骑士的绝大多数 Mod 都跑在一个公共底座上:Modding API。游戏每更新一次大版本,底层程序集的结构就可能变,API 和 Mod 必须跟着适配,否则游戏连Assembly-CSharp.dll都读不过去,表现就是"黑一下屏直接退出"。

Scarab 安装 API 时的做法很聪明,它不会粗暴覆盖文件,而是把原版的Assembly-CSharp.dll备份成.v后缀、模组版保留为.m后缀,再把当前生效的Assembly-CSharp.dll指向模组版——这套命名规则就写在Scarab/Services/Installer.cs的顶部常量里。

具体操作:

  1. 打开 Scarab 主界面,找到 Mod API 这一项,看它的状态和版本号。
  2. 如果版本偏旧,直接点更新。判断标准很直观:已安装的 API 主版本号低于清单要求时,Scarab 会执行升级(对应Installerversion.Major >= manifest.Version这条判断,满足则跳过安装)。
  3. 更新后先进一次游戏。若仍然闪退,把 API 停用再试——能进游戏就说明问题出在 API 或 Mod 层,而不是游戏本体。

一个必须牢记的禁忌:不要手痒把网上随便下载的 DLL 手动塞进游戏目录,绕过 Scarab 会让你失去版本管理能力,出问题时反而更难看。

第 2 步:检查目录、权限和配置是否正常

很多"装不上"的怪问题,根源不在 Mod,而在游戏目录本身。Scarab 首次启动时会自动探测游戏安装位置,覆盖 Steam、GOG、Xbox 的常见默认路径,这段逻辑集中在Scarab/Settings.cs里;如果全都探测不到,它会弹出窗口让你手动指定(对应Scarab/Views/PathWindow.axaml)。你的配置会保存到%APPDATA%/HKModInstaller/HKInstallerSettings.json

动手前,先对照这份清单:

  • 游戏安装目录拥有完全控制权限,安装盘不是只读
  • 游戏路径中不含中文、空格之外的特殊字符
  • 杀毒软件已把游戏目录和 Scarab 加入白名单(防病毒误删关键文件很常见)
  • 磁盘剩余空间充足,至少留出 1~2 GB
  • 游戏进程已完全退出(包括后台挂着的 Steam 下载任务)

有一个细节值得知道:Scarab 会把"停用的 Mod"统一挪到一个单独的Disabled文件夹里,和正在生效的Mods文件夹分开管理。如果你手动在游戏目录里乱建文件夹、乱删东西,反而可能破坏它的预期布局,所以尽量让它在自己的规则下干活。

第 3 步:把安装顺序理顺——API 先行,依赖自动补齐

"先装什么、后装什么"直接决定成败。好在 Scarab 已经内置了顺序管理:

  • 安装任何 Mod 时,第一步都会确保 API 已经就位(Installer.Install一开始就调用InstallApi()),所以你不需要自己惦记"API 装了没"。
  • 依赖会自动补齐:_Install内部会递归地把当前 Mod 的依赖项先装好;启用一个 Mod 时,如果它的依赖处于停用状态,Scarab 也会顺手把依赖启用起来,避免"装了等于没装"。
  • 如果你想看清某个 Mod 被谁依赖、卸载会不会牵连别人,可以用Scarab/Services/ReverseDependencySearch.cs里的反查逻辑,它会沿依赖链找出所有下游 Mod。

落实到操作上,建议这样分批:

  1. 先只装 Mod API,进一次游戏确认能跑通。
  2. 再装框架类、前置类 Mod,一次装一两个。
  3. 最后装功能类 Mod,每批安装后立刻启动游戏验证一次。
  4. 看到界面上的依赖关系提示时别跳过,先把它喂给需要的 Mod。

分批安装的意义在于:一旦出问题,你手里有个干净的"对照组",而不是面对一堆同时失效的 Mod 无从下手。

第 4 步:崩溃之后,用排除法锁定真凶

Mod 之间打架是常见的崩溃来源,好在定位方法非常简单,不需要任何专业知识。

先说个安心的事实:在 Scarab 里"停用"不等于"删除",它本质上是把 Mod 文件夹从Mods目录移到Disabled目录(见Installer.Toggle),随时可以原样搬回来,是安全的、可逆的。所以你可以放心大胆地做实验:

  1. 把所有 Mod 全部停用,只保留 API,启动游戏。
  2. 确认能正常进主菜单后,启用一半的 Mod,再进一次游戏。
  3. 如果崩溃了,说明真凶在刚启用的这一半里;如果没崩,说明真凶在另一半里。
  4. 反复对半切分,最多几次就能锁定具体是哪个 Mod。
  5. 找到后检查它的依赖是否齐全、是否有更新版本,或者直接向作者反馈。

这个过程通常十分钟内结束,比反复重装游戏高效得多。

第 5 步:换平台、搬游戏、换电脑之后,别急着骂工具

有一种情况会让人误以为"工具坏了":游戏在 Steam 里没动过,但你把系统从 Windows 换成了 Linux,或者改用 Proton 兼容层启动,结果 Mod 一夜之间全部失效。这不是随机故障,而是平台变了,部分 Mod 的下载链接本身是分平台的。

Scarab 专门处理了这件事:Settings.DetectLinuxGamePlatform会检测你当前是不是用 Proton 跑 Windows 版游戏,一旦发现平台与上次不同,就把PlatformChanged标记置位,下次启动时Installer.HandlePlatformChange会强制重装 API 和所有带平台专属文件的 Mod。

所以遇到这种情况,正确处理是:

  1. 正常打开 Scarab,让它完成自动重装。
  2. 如果反复探测不对,删掉HKModInstaller/HKInstallerSettings.json让配置重新生成。
  3. 平时养成备份习惯:把Managed目录下的Assembly-CSharp.dll.v(原版备份)单独复制一份,任何时候想回退原版都有底气。

第 6 步:几个高频报错,先认识再处理

Scarab 在安装时会对每个下载文件做 SHA256 哈希校验,这部分逻辑集中在Installer里。看懂下面三个常见信号,能帮你省下大量猜测时间:

  • HashMismatchException(校验失败):下载到的内容与清单里的哈希对不上,通常是下载被中断、镜像缓存了旧文件,或者中间环节被篡改。对策是稍等重试、换个网络环境再试。这是保护机制,不是 bug,说明 Scarab 拦下了坏文件。
  • 下载超时 / 拉不到 Mod 列表:Scarab 从 modlinks 清单拉取 Mod 与 API 信息,主源不通时会自动切换到 CDN 备用源(见Scarab/Services/ModDatabase.cs)。网络恢复后重启工具即可。
  • 网络环境比较特殊:如果代理或证书导致请求失败,工具内置了Scarab/Util/WorkaroundHttpClient.cs这类兼容处理,可以先检查自己的代理设置。

几个流传很广的说法,其实值得正名

  • "游戏一更新,所有 Mod 都要删光"——不必。等 API 和 Mod 作者跟进新版本即可,Scarab 会把过期的项目标记出来,更新而不是重装。
  • "显示安装成功但游戏没变化,肯定是工具坏了"——先查三件事:API 是否处于启用状态、该 Mod 是否显示为"已启用"、游戏是否以管理员权限运行。多数情况下这三点里能找出答案。
  • "崩溃了就该卸载重装游戏"——先试试停用全部 Mod 再进游戏,往往只是 API 版本对不上,重装游戏反而更耗时。
  • "Mod 装得越多越强"——依赖冲突的概率随数量上升,按需安装、及时停用不用的 Mod,才是稳定之道。

想彻底搞懂?把源码拉下来自己看

如果你愿意花点时间,直接看源码是最快的学习方式。项目本身是开源的,可以用以下命令获取:

git clone https://gitcode.com/gh_mirrors/sc/Scarab

几个值得先读的入口:

  • 程序入口:Scarab/Program.csScarab/App.xaml.cs
  • 安装核心:Scarab/Services/Installer.cs(API 备份、哈希校验、依赖递归安装都在这里)
  • 数据来源:Scarab/Services/ModDatabase.cs(Mod 清单的获取与解析)
  • 状态模型:Scarab/Models/ModState.cs(已安装、未安装、启用与否的抽象)
  • 界面布局:Scarab/Views/目录下的.axaml文件

仓库里还带了Scarab.Tests/测试工程,跑一遍测试能帮你验证自己对行为逻辑的理解是否准确。

每次动手前,花 30 秒默念这张清单

  • 游戏是最新版本,且进程已完全退出
  • Mod API 已就位且版本匹配
  • 目录权限、杀毒白名单、磁盘空间都过关
  • 先装 API,再装依赖,最后装功能 Mod
  • 每批安装后进一次游戏验证
  • 出问题用停用排除法,而不是急着删文件

崩溃不可怕,可怕的是没有一套可复用的排查思路。记住"API 对版本、目录要干净、顺序别乱、冲突用排除法"这四句话,配合 Scarab 自带的依赖管理和安全校验,绝大多数闪退问题都能在十分钟内收场。耐心一点,你的模组旅程会顺畅得多。

【免费下载链接】ScarabAn installer for Hollow Knight mods written with Avalonia.项目地址: https://gitcode.com/gh_mirrors/sc/Scarab

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表