五一的时候,突然想打dota 1. 但扫兴的是, 每次一打开游戏war3.exe,就会弹出某内存地址无法读取的错误提示窗,然后游戏就自动退出了。
很明显,这是兼容性问题。我刚刚更换了笔记本电脑,而且安装的是 win 11 操作系统。
我怀疑是不是win11不支持war3。但去论坛或者直播间问了一下,有很多人能够使用win11正常玩 dota, 说明系统本身肯定是兼容的。(这里非常敬佩微软的工程能力,一开始玩war3时,win7都还没普及呢,现在二十年过去了,win11居然还能支持那么古老的游戏。)
那么,究竟是什么问题呢?
war3文件夹下,有一个Errors文件夹,一猜就知道,这是存储程序错误日志的地方。打开之后,能看到异常出现时的调用栈如下:
Stack Trace (Manual)
----------------------------------------
Address Frame Logical addr Module
76988F38 0019DFDC 0001:00057F38 C:\Windows\System32\MSCTF.dll
76988317 0019DFF0 0001:00057317 C:\Windows\System32\MSCTF.dll
6DABA471 0019E008 0001:00089471 C:\Windows\SYSTEM32\textinputframework.dll
76960046 0019E050 0001:0002F046 C:\Windows\System32\MSCTF.dll
7695380C 0019E0A0 0001:0002280C C:\Windows\System32\MSCTF.dll
769D84B5 0019E0B0 0001:000A74B5 C:\Windows\System32\MSCTF.dll
...
textinputframework
一看就知道跟文本输入有关, MSCTF
经过一番检索,发现是 Microsoft COM Text Services Framework Server DLL的意思。其功能就是为第三方应用提供文本输入服务。
这二者一结合,兼容性的源头就能够猜得到了 —— “输入法”。war3需要调用系统的输入法,但是win11自带的输入法兼容性出现了问题,所以出现了程序奔溃。这个猜测很合理,怎么验证呢?
打开了win11自带的微软拼音输入法设置,惊喜的发现的确有一个兼容性选项,赶紧打开。
![](https://img.haomeiwen.com/i25380/aee09842fb565cb6.png)
但遗憾的是,问题依旧。难道是前面的推理错了?
我继续尝试,去网上下载了某狗输入法。安装后,切换到搜狗输入法,然后再双击war3.exe.
游戏竟然恢复了!!!
看来自己的推理没有错。
但是,win11自带的微软拼音输入法深得我心,我并不想使用那个天天弹窗的输入法。于是,我又卸载了某狗,恢复了微软拼音输入法。
但惊喜的是,游戏仍然可以正常打开!
这说明了什么呢?
我观察到,游戏正常后,注册表多出来一些数据。这说明,启动成功后,war3在注册表内记录了某些配置,后面启动时,就会直接读取这些配置,因此不会再次崩溃。
我赶紧把这些注册表导出,以后再安装游戏时,直接导入这个注册表应该就能行。
网友评论