外观
部署细节
这篇列出安装器对文件系统做的全部改动,便于审计、手工排障或写自动化脚本。
命令行参考
cmd
StudioInstaller.exe :: 安装(默认行为)
StudioInstaller.exe --install :: 安装
StudioInstaller.exe -s :: 查询状态,输出 Installed / NotInstalled
StudioInstaller.exe --status :: 同上
StudioInstaller.exe -u :: 卸载
StudioInstaller.exe --uninstall :: 卸载
:: --studio 直接指定目标,跳过选择菜单(三种命令都支持)
StudioInstaller.exe --install --studio "D:\Studio 2.0"
StudioInstaller.exe --status --studio "D:\Studio 2.0\Studio.exe"
StudioInstaller.exe --uninstall --studio "D:\Studio 2.0"--studio 接受安装目录或**Studio.exe 的完整路径**,两者等价:传入文件路径时安装器会自动取其所在目录。路径会去掉首尾空格与引号后再校验。
| 退出码 | 含义 |
|---|---|
0 | 成功(--status 时表示 Installed) |
1 | 失败(--status 时表示 NotInstalled) |
双击运行(无参数、控制台可交互)时,程序会在结束前暂停并提示 Press Enter to close this window...,方便查看输出;用命令行调用或重定向输出时不会阻塞。
选择 Studio 目录
不带 --studio 且控制台可交互时,安装器先扫描 C:\Program Files\Studio 2.0 与 C:\Program Files (x86)\Studio 2.0,然后显示选择菜单:
text
请选择 Studio 安装目录:
1. C:\Program Files\Studio 2.0 (自动识别)
M. 手动指定目录或 Studio.exe
0. 取消
输入编号或 M:| 输入 | 行为 |
|---|---|
编号(如 1) | 选中对应的自动识别结果 |
M | 进入手动指定:粘贴目录或 Studio.exe 路径;直接回车则打开文件选择窗口 |
0 | 取消,不做任何改动 |
| 其他 | 提示 [Error] 请输入有效编号、M 或 0。,重新等待输入 |
手动输入的路径校验不通过时,提示下面这行后回到输入循环,可以重新填:
text
[Error] 无效的 Studio 目录,必须包含 Studio.exe 和 Studio_Data\Managed\Studio.Startup.dll。非交互环境
重定向了输入或输出(脚本、CI)时不会显示菜单,直接使用第一个自动识别到的目录;一个都没检测到则中止,并提示用 --studio <path> 指定。
安装:部署清单
所有文件部署到 <Studio>\Studio_Data\Managed\:
| 目标 | 来源 | 说明 |
|---|---|---|
StudioSDK.dll | bin/ | 插件 SDK |
StudioModLoader.dll | bin/ | 运行时加载器 |
0Harmony.dll | deps/ | HarmonyX 补丁引擎 |
MonoMod.RuntimeDetour.dll | deps/ | Harmony 依赖 |
MonoMod.Utils.dll | deps/ | Harmony 依赖 |
Mono.Cecil.dll | deps/ | IL 读写 |
Mono.Cecil.Rocks.dll | deps/ | Cecil 扩展 |
WebView2\* | bin/WebView2/ | WebView2 弹窗宿主(6 个文件) |
Updater\* | bin/Updater/ | 自动更新宿主 |
另外会创建 <Studio>\Mods\ 目录(已存在则跳过)。
WebView2 宿主为什么单独放一个目录
它运行在 Windows 的 .NET 上,而不是 Studio 的 Unity Mono 环境里,因此需要独立的进程宿主与配套 DLL,不能和 Unity 程序集混在一起。
安装:注入点
- 首次安装时把
Studio.Startup.dll备份为Studio.Startup.dll.orig.bak(已存在则不覆盖)。 - 从备份读取原始程序集,定位
Studio.Startup.Services.InitializationSequenceService.Initialize()。 - 在该方法第一条指令之前插入
call StudioModLoader.Bootstrapper.Initialize()。 - 结果写入
Studio.Startup.dll.tmp→ 删除原Studio.Startup.dll→ 把.tmp改名为Studio.Startup.dll。
注入完成后输出:
text
Patched Studio.Startup.dll successfully!卸载:还原清单
cmd
StudioInstaller.exe --uninstall- 用
Studio.Startup.dll.orig.bak覆盖回Studio.Startup.dll,随后删除该备份。 - 删除
Managed下的StudioModLoader.dll、StudioSDK.dll、0Harmony.dll、MonoMod.RuntimeDetour.dll、MonoMod.Utils.dll、Mono.Cecil.dll、Mono.Cecil.Rocks.dll。 - 删除
Managed\WebView2\与Managed\Updater\中的文件;目录空了就一并删除。
Mods 目录保持原样
卸载不会删除 Mods 目录中的插件,也不会删除插件的配置文件与日志。需要彻底清理时手动删除即可。
目录结构(解压后的发行包)
text
StudioModFramework/
StudioInstaller.exe
StudioSDK.dll
StudioModLoader.dll
bin/
StudioSDK.dll
StudioModLoader.dll
WebView2/ # WebView2 宿主文件
Updater/ # 更新宿主文件
deps/
0Harmony.dll
MonoMod.RuntimeDetour.dll
MonoMod.Utils.dll
Mono.Cecil.dll
Mono.Cecil.Rocks.dll排错
| 输出 | 原因 | 处理 |
|---|---|---|
[Error] Managed folder not found | 目录不是 Studio 安装根目录 | 确认目录含 Studio_Data\Managed |
Framework update host is missing | 包不完整 | 重新获取完整发行包 |
Framework WebView2 file is missing | bin/WebView2/ 缺文件 | 重新构建或重新获取完整包 |
Bootstrapper type not found in StudioModLoader.dll | Loader 版本与安装器不匹配 | 用同一版本构建产出的文件 |
InitializationSequenceService type not found | Studio 版本不匹配 | 当前框架针对 Studio 2.0(Unity 2022.3) |
| 安装成功但按 F10 无反应 | 安装时 Studio 没完全退出 | 重新运行安装器覆盖一次 |
[Error] Installer could not complete | 权限不足 | 以管理员身份运行 |
[Error] --studio requires a Studio directory or Studio.exe path. | --studio 后面没跟路径 | 补上目录或 Studio.exe 路径 |
[Error] Invalid Studio path: <路径> | --studio 指定的路径不是有效的 Studio 目录 | 确认该目录含 Studio.exe 与 Studio_Data\Managed\Studio.Startup.dll |
[Cancelled] No Studio directory selected. Use --studio <path> to specify Studio directly. | 菜单里选了 0,或非交互环境下没检测到 Studio | 用 --studio 明确指定目标 |
[Error] 请输入有效编号、M 或 0。 | 菜单里输入了无法识别的字符 | 按提示重新输入 |
[Error] 无效的 Studio 目录,必须包含 Studio.exe 和 Studio_Data\Managed\Studio.Startup.dll。 | M 手动输入的路径校验失败 | 检查路径是否指向真正的 Studio 安装根目录 |