[关闭]
@wz520 2021-05-04T10:57:34.000000Z 字数 1493 阅读 5139

【ZUN在程序里卖萌系列】无法同时运行两个不同的东方作品

东方STG


由 ZUN 开发的东方 STG 官方作品中,有一部分作品是不能同时运行的。

比如开着 永夜抄 不关,再启动 花映冢 的话,会报“不能双开”(二つは起動できません)的错误,让人感到莫名其妙。
或者开着 风神录 再开 黄昏酒场 ,也会弹出类似的错误框。

尤其是自th12(星莲船)开始到th16.5(秘封噩梦日记)之间的所有 STG 作品均无法同时运行

举个栗子:

总之这几个作品中只要你开了其中任何一个并且不关,就不能同时开另一个。

技术细节

其实 OD 一下就很清楚了,ZUN使用了最常见的 CreateMutex 大法来防止同一个游戏的多重启动。
这个方法在很多讲 Win32 编程的书籍都有介绍,用法也不复杂,很多人都会用。

但是在部分 STG 作品中,ZUN 却在这个函数的调用上犯了一个大错误:这些作品传给 CreateMutex 的所有参数都是一样的,尤其是最后一个参数(互斥体名称)。

以th12(星莲船)开始到th16.5(秘封噩梦日记)之间的作品为例,它们调用 CreateMutex 的代码都是:

  1. CreateMutex(NULL, TRUE, "Touhou 12 App");

明明是不同的程序,却都要创建一个名为 Touhou 12 App 的互斥体。
结果就是上面提到的几个游戏中的任何一个都会认为它们和自己是“同一个游戏”。自然就无法正常阻止“同一个游戏”的多重启动了。

官作游戏的互斥体名称一览表

这是从红魔乡开始到目前为止的所有官作游戏(包括黄昏酒场)所使用的互斥体名称一览表。具有相同互斥体名称的游戏是不能同时运行的。

游戏名称 版本号 互斥体名称
红魔乡 1.02h Touhou Koumakyou App
妖妖梦 1.00b Touhou YouYouMu App
永夜抄 1.00d Touhou 08 App
花映冢 1.50a Touhou 08 App
文花帖 1.02a Touhou 08 App
风神录 1.00a Touhou 10 App
黄昏酒场 1.00a Touhou 10 App
地灵殿 1.00a Touhou 11 App
星莲船 1.00b Touhou 12 App
文花帖DS 1.00a Touhou 12 App
妖精大战争 1.00a Touhou 12 App
神灵庙 1.00c Touhou 12 App
辉针城 1.00b Touhou 12 App
弹幕天邪鬼 1.00a Touhou 12 App
绀珠传 1.00b Touhou 12 App
天空璋 1.00a Touhou 12 App
秘封噩梦日记 1.00a Touhou 12 App
鬼形兽 1.00b th17 App
虹龙洞 1.00a th18 App

可见除了自th12(星莲船)到th16.5(秘封噩梦日记)之间的所有 STG 作品外,还有下列这些作品不能同时运行:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注