多开
每个游戏实例有自己的控制管道,所以一台测试机可以同时跑好几个游戏。克隆一个实例只要几秒钟、约 90 MB。
pwsh -NoProfile -File clone-instance.ps1 -Slot 2 # versions\1.26.51.01-hi2,约 90 MB,几秒钟
& .\Start-BeDDGame.ps1 -Instance 1.26.51.01-hi2 # 启动时不把窗口提到前面
Connect-BeDD -PipeName BeDD-1.26.51.01-hi2 # 该实例配置里的 pipeName克隆不存在时,Start-BeDDGame.ps1 -Slot 2(或 -Instance <基础实例>-hi2)会自己先克隆出来。不给 -Instance 时,
它启动 Be.D.D. 找到的基础实例,-Slot 2 及以上则启动它的克隆。clone-instance.ps1 只接受 1 到 32 号槽位;更大的槽位用
BeDDSetup.psm1 的 New-BeDDClone -Source <基础实例> -Slot 41。基础实例有变化时,已有的克隆会同步更新。
并行测试的规矩
克隆出来的实例有自己的 mods\、日志、存档和设置。几条规矩,免得并行的测试互相打架:
- 每个实例用自己的锁文件;按实例目录找自己的游戏进程,别只看进程名
Minecraft.Windows(不然会关掉别人的游戏)。 - 一定以
Minecraft.Windows.exe这个文件名启动(Start-BeDDGame.ps1就是这样做的):换个名字,游戏会改用你平时玩的 Minecraft 数据,而不是这个实例的。 - 测试存档用
Set-WorldSinglePlayer <存档目录>(框架垫片里提供)设成单人:同一台电脑上的游戏共用一个联机登录, 多个多人存档同时打开会报"发生错误"(代码 "Blaze")。 - 需要在线加入服务器的测试,在
Start-Game之前设$script:ExclusiveSignaling = $true,等其他游戏关掉后独占整台电脑。
启动游戏
Start-BeDDGame.ps1 直接运行 versions\<实例>\Minecraft.Windows.exe,游戏从不抢前台(不需要 LeviLauncher:
exe 自己加载 LeviLamina)。它返回游戏进程。实例的 mods\BeDD 里必须有模块(Install-BeDDMod),
管理窗口也必须能启动,否则它抛出异常。
| 参数 | |
|---|---|
-Instance <名字> | 要启动的实例(默认:Be.D.D. 找到的那个) |
-Slot N | 改为启动它的克隆 <基础实例>-hi<N> |
-VersionsDir <目录> | LeviLauncher 的 versions 目录 |
-Label <文字> | 游戏在管理窗口里的名字(默认:调用脚本所在的项目和 worktree) |
管理窗口
本次登录后第一次运行 Start-BeDDGame.ps1 时会打开管理窗口,之后的运行(不管来自哪个终端、测试框架或 agent)都复用它。
每个游戏都以实时画面显示在里面,也只显示在里面:游戏自己的窗口留在屏幕外,任务栏上没有按钮,Alt+Tab 里也没有,
多个测试同时启动、关闭游戏时桌面上不会有窗口弹出又消失。它也从不抢焦点。

- 每个游戏标注启动它的脚本所在的项目(和 worktree)、实例名、pid,以及是否正在收到输入。
Start-BeDDGame.ps1 -Label可以自己起名。 - 关掉管理窗口会关掉里面所有的游戏(会先确认)。管理窗口被强制结束时游戏也会一起退出,不会在后台留下游戏。
- 双击某个游戏只看它一个。右键可以打开它的
latest.log或实例目录,或者关掉它。 - 脚本里:
BeDDManager.ps1 -List列出游戏,-Game <pid> -Action close关掉一个游戏,-Shutdown不经确认关掉管理窗口和所有游戏。
需要 PowerShell 7(pwsh)。游戏从不脱离管理窗口运行:找不到管理窗口的游戏会自己启动一个(配置 managerScript);
90 秒内没有管理窗口连上、或者彻底失去管理窗口的游戏会自行关闭(原因写在它的 latest.log 里)。