我永远记得这次手贱的操作。电脑里存了八个小型单机游戏,都是些几百MB的独立作品,平时不联网,点开就能玩。那天我嫌桌面太乱,想把游戏文件夹整理一下,顺手点进去看了看。里面除了每个游戏的专属文件夹,还躺着一个孤零零的“VC运行库”文件夹,我心想这种系统组件一般都装到C盘,怎么会在游戏目录里?八成是安装包残留,删了省几十兆空间。
按了Shift+Delete,清空回收站,心里还挺痛快。然后我就发现事情不对劲了。当我点开第一个游戏,那个像素风的地牢探索游戏,屏幕闪了一下,直接弹窗说“缺少vcruntime140.dll”。我愣了一下,这不是前几天还玩得好好的吗?我又去点第二个,一个横版解谜游戏,这次报错的是“游戏依赖组件未找到”,连窗口都没弹出来。第三个,第四个,第五个,每个游戏都是各种花式报错,要么说“无法定位程序输入点”,要么干脆双击后毫无反应。
我后背开始冒汗。八个游戏,全军覆没,一个都打不开。我赶紧去回收站找,结果Shift+Delete删得太彻底,根本找不到。又翻出之前的下载压缩包,发现这个游戏合集包本身就是绿色免安装版,里面的说明文档写着“本合集已集成运行库,存放于游戏根目录,请勿删除”。那份说明我压根没读,而那个“VC运行库”文件夹里,装的正是这八个游戏共通依赖的DLL文件。它们虽然表面上是不同公司的作品,但打包者为了省事,让所有游戏共用同一套运行时组件,就放在那个共享文件夹里。我一删,等于把八个游戏的命脉全掐断了。
当时还心存侥幸,想着去系统盘找一份对应的DLL补进去。结果一查,系统里虽然装了新版的VC++运行库,但这些老游戏用的是特定版本的旧接口,新版库里根本没有这些导出函数。去网上下载一个,又怕带毒,最后折腾了一个多小时,才从另一个设备上拷贝了对应版本的vcruntime140.dll和msvcp140.dll过来。放进那个文件夹后,游戏才重新能开。但其中有两个因为初始化时读到缺失的注册表信息,存档和按键设置全乱了,相当于白玩了半天。
这件事我复盘了一下,发现真正致命的不是删文件,而是我完全没意识到这些小游戏之间存在隐性的共享依赖。它们看起来是独立的八个文件夹,每个游戏各有各的exe,但运行的时候会优先从根目录加载某个公共DLL,那个文件就是它们的公共心脏。我只看到表面上的“多余”,以为可以顺手清理,结果一脚踩进了坑。

现在那八个游戏还在我的硬盘里,那个“VC运行库”文件夹我特意改成了醒目的红色名字,旁边还建了一个记事本,写下“别删,删了游戏全崩”。有时候人就是这样,非要手贱试一次才知道,有些文件看着没用,其实是整个系统的地基。八个游戏,一份共享文件,一个瞬间的脑抽,换来的是小半天的慌乱和两台电脑之间的折腾。代价不算大,但教训很真实。