MO2硬链接构建器可从你的MO2配置文件中创建一个独立可启动的Skyrim构建,无需修改原始游戏文件夹或MO2安装。它专为希望直接从真实文件夹启动Skyrim的玩家而设计。
4.0版本新内容版本4是一次全面的架构重建,重点在于更安全的隔离、更快的重建以及更好的恢复能力。- 为会话隔离、存档同步及退出后恢复行为新编译的C#启动器。
- 独立构建中不存在持久的 `_profile/` 文件夹。
- 增量重建现在仅重新部署更改过的模组。首次版本4构建会创建所需的基线;之后,在MO2中所做的更改无需清除并重新部署整个独立版即可应用。
- 游戏生成的存档文件会在清理前提取,重建后恢复。
- 中断的构建和启动器同步任务可在下次运行时恢复。
- 每次构建后自动执行快速校验与采样验证,并可随时进行完整SHA-256校验。
- 已移除实验性优化功能,以降低复杂度并减少杀毒软件的误报。
我为何打造这个
我最初的理由很简单:我想直接运行Skyrim,而不必承受MO2虚拟文件系统带来的额外开销。
MO2是一款极其强大的工具,我每天都会用它来管理超过3500个Mod。但运行游戏时
穿过 MO2增加了启动延迟——VFS需要在引擎启动前挂载。在大规模模组列表下,这种延迟相当明显。除了性能方面,我个人对于通过代理启动游戏这件事也感到不太满意。我希望模组能
实际已安装, 而非仅仅被转移。
这个工具最初是为了满足我自己的需求而构建的。我决定将其发布,献给所有有同样想法的人——那些既想获得原版引擎体验,又不想放弃MO2模组管理灵活性的天际玩家。
我想明确一点:这个工具不会削弱 MO2 的出色之处。你的原始游戏文件夹和 MO2 模组文件夹将完全保持原样不受影响。独立构建是一个隔离的副本,通过硬链接指向你现有的文件。你可以从不同的 MO2 配置文件中构建多个独立版本,当源文件和目标位于同一 NTFS 驱动器上时,几乎不占用额外的磁盘空间。
我不是专业的模组制作者或开发者——这是我发布的第一个工具。我制作它是因为我自己需要它,并且觉得其他人可能也会需要。
这一作有何不同
- 同盘构建时,所需额外磁盘空间几乎为零。 NTFS硬链接指向你现有的模组文件。独立文件夹内不包含重复数据—— 是 你的模组数据,在文件系统层面共享。跨驱动器部署会退化为完整复制,并会消耗额外的磁盘空间。
- 会话级配置注入。 预编译的C#启动器会在每次启动前,将MO2配置文件的INI和加载顺序文件注入到Windows标准位置,备份原有文件,并在退出后恢复一切。会话期间产生的存档会自动同步回MO2配置文件。每次游戏关闭时,Windows配置都会恢复到会话前的状态。
- 智能增量重建。 首次构建后,后续重新构建仅会重新部署实际有变更的模组。该工具会将您当前的模组列表与已保存的快照进行比对,并跳过所有已是最新状态的模组。
- 崩溃安全部署。 部署过程使用事务检查点。如果过程中断,它可以从上次中断的地方继续,而不是从头开始。
主要特性
部署- NTFS硬链接 — 将模组和游戏本体文件部署为硬链接。同一驱动器部署时不产生数据重复。
- 复制回退 — 当独立目标位于不同驱动器时,自动回退为完整文件复制。
- 增量重建 — 三重门脏数据检测(模组列表哈希 → 模组文件夹指纹 → 逐文件状态)可识别哪些模组发生了更改。仅重新部署这些模组。
- 动作队列执行器 — 分阶段执行:先执行所有删除,再执行所有新链接。防止出现部分状态。
- 受保护前缀守卫 — 核心游戏基础数据(如 Data/Update)绝不会被模组文件覆盖。
隔离- C# 会话启动器 — 在部署时通过 csc.exe 编译。将原始加载器 EXE 替换为一个包装程序,该程序在每次启动前将您的 MO2 配置文件的 INI 和加载顺序文件注入标准的 Windows 位置,备份现有文件,并在退出后恢复它们。存档在游戏过程中保存到 Windows 文档,并在游戏关闭时自动同步回您的 MO2 配置文件。
- 延迟任务恢复 — _wrapper_state.json 文件用于追踪启动器的同步周期。如果游戏在启动或关闭过程中崩溃,下次运行将自动完成中断的存档同步。
- 配置文件映射 读取您的MO2配置文件的plugins.txt、loadorder.txt和INI文件,以便启动器为每次会话注入正确的配置。
安全- 独立身份验证 — 该工具仅将包含 standalone_metadata 目录的文件夹识别为有效的独立构建版本。它会拒绝清理任何缺少此标记的文件夹。
- 目标阻止列表 — Steam 文件夹、您的原版游戏文件夹以及 MO2 安装目录均被硬性禁止作为构建目标位置。
- 清理前的预收获 — 在清空独立文件夹进行重建之前,工具会扫描游戏生成的文件(FNIS输出、JContainers数据、Bodyslide网格、崩溃日志),并将它们复制到MO2模组文件夹中名为standalone_generated_files的模组里。这些文件通过硬链接计数来识别:已部署的文件与其源文件共享同一个inode,而游戏生成的文件则不然。
构建后- 分级验证 — 部署后,工具会先进行快速检查(文件大小+时间戳),随后进行抽样检查(对5%的文件随机选取并进行SHA-256校验)。按需可进行完整检查(100% SHA-256)。
- HTML 构建报告 — 生成 standalone_metadata/build_report.html。显示每个已部署文件、其来源模组、部署方式(硬链接 vs 复制)以及验证结果。可在浏览器中筛选和搜索。
存档管理- 自动会话同步 — C#启动器会在每次会话前将你MO2配置中的存档复制到Windows文档中,并在退出后将新存档同步回来。正常游玩期间无需手动操作。
- 预清扫 — 在清除独立文件夹以进行重建之前,Windows 文档中的任何存档都会首先自动同步到你的 MO2 配置文件中。
- 隔离系统 — 如果在任何同步过程中出现文件名冲突,现有文件会被移动到带时间戳的隔离文件夹,而非覆盖。该工具绝不会永久删除存档文件。
独立管理器- 建造注册表 — Tab 2 列出了系统中检测到的所有独立构建,数据来自其 standalone_metadata.json 文件。
- 元数据视图 — 在界面中选择任意构建,即可直接查看其源路径、构建日期、游戏及配置文件信息。
前置条件
- Mod Organizer 2 — 这是一个MO2插件。必须通过MO2运行。
- NTFS 驱动器 — 硬链接是NTFS的一项功能。源和目标都必须位于NTFS卷上。
- 零空间建造用同款驱动器 — 目标文件夹必须与你的MO2模组文件夹位于同一物理磁盘上,才能使用硬链接。跨磁盘部署可以工作,但会占用完整磁盘空间(复制模式)。
- .NET Framework — C# 启动器编译需要 csc.exe,该程序随 .NET Framework 3.5 或 4.x 一同提供。大多数 Windows 系统均包含这两个版本。若不可用,工具将回退至 .bat 启动器。
安装
- 下载MO2_Hardlink_Builder文件夹。
- 打开您的Mod Organizer 2安装文件夹,并导航至plugins目录。
- 将整个MO2_Hardlink_Builder文件夹复制到plugins中。
- 如果你之前安装过这个工具的旧版本,请先从`plugins`文件夹中删除其目录。如果跳过此步骤,MO2将会同时加载两个版本,并显示该工具的两个重复条目。
- 请重启 Mod Organizer 2。
- 一个新的图标标记为 MO2 硬链接构建器 将出现在MO2工具栏或“工具”菜单下。
使用方法
第 0 步 — 在使用第 4 版之前,请先清理当前的独立构建
版本4采用了新的架构,不建议直接复用旧版本生成的独立构建。如果您已使用旧版本构建过独立应用,请先清理该构建,或选择全新的专用目标文件夹。首次进行版本4构建将创建后续增量重建所需的新元数据和基线。
步骤1 — 选择配置文件打开插件。工具会自动加载你当前活跃的MO2配置。你可以使用下拉菜单切换配置,或点击
浏览 指向任意配置文件文件夹(包括当前MO2安装目录之外的配置文件)。
步骤2 — 选择目标文件夹输入或拖放用于创建独立构建的文件夹。请使用专用文件夹——工具在清理时会清空整个目标目录,任何不属于先前独立构建的内容都将被删除。目标位置不能是你的Steam文件夹、游戏安装文件夹或MO2文件夹。出于安全考虑,这些位置已被硬性禁止。
如果目标位置与mod所在驱动器不同,将出现警告横幅,构建将使用复制模式(占用完整磁盘空间)。
第3步 — 建造点击
构建独立版。该工具执行四个阶段:
- 清理 — 清空目标文件夹(在收集完游戏生成的文件后)。
- 扫描中 — 读取你当前启用的模组列表,并将每个文件映射到其来源模组或基础游戏。
- 部署 — 将文件部署为硬链接(跨驱动器时则复制)。先执行删除,再创建链接。
- 验证 — 确认所有已部署的文件均存在且完好无损。
完成后,standalone_metadata/build_report.html 会自动打开(或者你也可以通过
显示构建报告 按钮)。
第4步 — 启动游戏前往您的独立目标文件夹。使用包装器EXE(例如skse64_loader.exe)运行游戏。原始加载器已重命名为_skse64_loader_original.exe,包装器取而代之。此重命名仅发生在独立构建文件夹内——您的原始游戏安装和MO2设置不会被修改。
启动器会在游戏启动前注入你的MO2配置文件的INI和加载顺序文件,并在游戏退出时将新存档同步回你的MO2配置文件。
部署模式- 最佳 — 所有源文件与目标文件位于同一驱动器: 硬链接模式 — 零额外磁盘空间。
- 部分 — 仅同一驱动器上的模组: 模组为硬链接,基础游戏为复制。
- 部分 — 同一驱动器上仅有基础游戏: 基础游戏为硬链接,模组为复制。
- 最差——全部位于不同驱动器: 完整复制模式 — 将占用全部磁盘空间。
管理存档
存档管理是全自动的。C# 启动器处理所有同步——正常游玩无需任何手动操作。
- 每次会话开始前: 来自您的MO2配置的存档已复制到Windows文档的存档文件夹中,以便游戏能够找到它们。
- 每场会话结束后: 新存档通过暂存与完整性校验流程,从Windows文档的存档目录同步回你的MO2配置文件,随后从文档目录中移除。你的MO2配置文件始终是各个会话之间的持久存储。
- 重建前: 点击“清理独立存档”后,Windows“文档”文件夹中存在的所有存档都会被移入你的MO2配置文件,之后该文件夹才会被清空。
如果在同步期间发生文件名冲突,现有文件将移动到目标存档目录内带时间戳的隔离文件夹中。该工具绝不会永久删除存档文件。
正在验证您的构建
检查你的构建是否正确,最快的方法是:
- 在浏览器中打开standalone_metadata/build_report.html。顶部的验证结果框应显示 验证通过 背景为绿色。
- 从独立文件夹启动游戏,加载存档,游玩一分钟,然后保存并退出。
- 游戏退出后,请检查MO2配置文件的saves/文件夹——新存档应已被启动器自动同步到该位置。
- 检查 %USERPROFILE%\Documents\My Games\<Game>\ — 会话期间的INI文件来自你的MO2配置文件。退出后,它们会被恢复为原始值。游戏内任何设置更改(音量、按键绑定)都会保存在启动器复制到此处的INI文件中,并在下次构建时反映到你的MO2配置文件的INI中。
- 如果使用SKSE,请查看%LOCALAPPDATA%\<游戏>\SKSE\ — 日志应显示正确的模组列表已生效,确认启动器的plugins.txt注入已正常工作。
故障排除
如果构建看起来有问题,请检查 standalone_metadata/ 目录中的文件:
- build_report.html — 交互式报告,显示每个文件、其来源及部署方式。使用搜索和筛选选项查找特定模组或文件类型。
- 执行报告.json — 原始部署日志。显示每个文件所使用的精确方法(硬链接、复制、复制回退)及任何错误。
- mapping_manifest.json — 工具在部署前构建的完整文件到源映射。用于确认某个特定文件本应被部署,以及它预期来自何处。
如果游戏在启动时崩溃,请查看独立版根目录下的wrapper_log.txt。这是C#启动器自身的日志,记录了存档同步和环境设置步骤。
如果启动器异常退出,且你的Windows“文档”或AppData文件似乎仍处于注入状态,请在 `%USERPROFILE%\Documents\My Games\<game>\` 和 `%LOCALAPPDATA%\<game>\` 中查找以 `.bak_standalone` 结尾的文件。如果存在,请将当前已注入的文件重命名移开,并将 `.bak_standalone` 文件恢复为原始名称(例如,将 `Skyrim.ini.bak_standalone` 重命名为 `Skyrim.ini`)。对AppData中的 `plugins.txt.bak_standalone` 和 `loadorder.txt.bak_standalone` 执行相同操作。在再次启动前,请运行构建验证步骤。
standalone_metadata 文件夹
此文件夹是构建版本的身份标识,请勿删除。
- standalone_metadata.json - 源路径、游戏名称、配置文件名称、构建设置。工具需要这些信息来将此文件夹识别为有效的独立文件夹。
- build_report.html - 构建后交互式报告
- mapping_manifest.json 验证引擎与增量重建逻辑使用的文件到源映射。
- execution_report.json - 原始部署执行日志。
没有 `standalone_metadata.json` 文件,出于安全考虑,清理按钮将拒绝对该文件夹执行操作。
已知不兼容项
带有基于DLL完整性检查的模组(例如:改进相机) 一些基于DLL的模组(例如“改进摄像机”Improved Camera)可能会在检查可执行文件路径或检测到启动器封装时拒绝独立环境。这是其完整性逻辑产生的误报,而非文件缺失问题。对于硬编码此行为的模组,没有可靠的变通方法。
云同步应用(Dropbox、OneDrive、Google Drive) 这些服务可以重新映射您的“文档”或“AppData”文件夹的物理位置。如果它们改变了C#启动器所期望的路径,备份-注入-恢复流程可能无法正常运行。在运行独立版本之前,请禁用游戏存档和设置文件夹的云同步功能。尤其是OneDrive,在Windows上已知有拦截“文档”路径的倾向。
GOG及其他非Steam版本 C# 启动器是围绕 Steam 版天际及其注册表结构设计的。GOG 及其他非 Steam 版本不受支持,我也没有计划为它们添加支持。我的主要测试环境是 Steam,我不想为无法测试的平台维护代码路径。
重要说明
- 该版本为静态快照。 在MO2中添加模组、更改加载顺序或编辑INI不会更新独立版本。您必须再次点击“构建独立版本”才能应用任何更改。
- 硬链接需要NTFS格式且位于同一驱动器。 如果你在构建后将MO2模组文件夹移动到其他驱动器,独立版中的硬链接仍会指向原始位置。除非你想更改启用的模组,否则无需更新构建。
- 不要删除standalone_metadata。 这个文件夹是工具识别该目录为有效独立构建的关键。缺少它,安全检查将无法运行,清理操作也会被阻止。
- 请先在MO2中进行测试。 独立版本的好坏取决于你的MO2配置。如果游戏无法通过MO2正常运行,那么从独立版本运行也不会顺畅。
- 通过MO2运行该插件。 该工具通过MO2的内部API读取您的模组列表和个人配置。若以独立Python脚本方式运行,它将无法正常工作。