从日志来看,现在的核心问题是:你虽然装了 comctl32,但 64 位 Wine 环境下的 32 位兼容层(wow64)没有正确注册控件,导致 HD 启动器还是找不到 Common Controls 6.0。
这些
fixme:actctx 警告其实是「致命错误」的前兆 —— 解决这个问题的唯一可靠方式是放弃 64 位 Wine 环境,直接用纯 32 位环境运行(这是老 Windows 游戏在 Wine 下的黄金法则)。最终解决方案(纯 32 位环境,一步到位)
1. 创建专属的纯 32 位 Wine 环境(彻底避开 64 位兼容问题)
bash
运行
# 创建名为 .wine-homm3 的纯32位环境(路径:~/.wine-homm3)
WINEARCH=win32 WINEPREFIX=~/.wine-homm3 winecfg
运行后会弹出 Wine 配置窗口,直接选「Windows 7」→「确定」即可(自动初始化环境)。
2. 为 32 位环境安装全套必备组件(无 64 位下载干扰)
bash
运行
# 安装 comctl32 + 所有必要运行库(纯32位,不会触发64位下载)
WINEPREFIX=~/.wine-homm3 winetricks comctl32 vcrun2005 vcrun2008 dotnet20sp2 dx9
- 过程中如果有弹窗,全部选「默认 / 安装 / 是」
- 即使有个别
fixme警告也不用管,只要没有error就说明安装成功
3. 手动注册控件(确保 Common Controls 生效)
bash
运行
# 进入32位环境的 system32 目录
cd ~/.wine-homm3/drive_c/windows/system32/
# 强制注册 comctl32.ocx
WINEPREFIX=~/.wine-homm3 wine regsvr32 comctl32.ocx
# 注册 mscomctl.ocx(英雄无敌3 HD 启动器专用)
WINEPREFIX=~/.wine-homm3 wine regsvr32 mscomctl.ocx
执行后如果看到「DllRegisterServer in comctl32.ocx succeeded」就说明注册成功。
4. 用 32 位环境运行游戏(核心步骤)
bash
运行
# 进入游戏目录(注意你的游戏在 .wine32 目录下,路径要对应)
cd ~/.wine32/drive_c/GOG\ Games/HoMM\ 3\ Complete/
# 用纯32位环境运行 HD 启动器
WINEPREFIX=~/.wine-homm3 wine ./HD_Launcher.exe
# 如果 HD 启动器仍打不开,直接运行游戏主程序(绕过 HD 补丁)
# WINEPREFIX=~/.wine-homm3 wine ./heroes3.exe
为什么这个方法能解决问题?
- 纯 32 位 Wine 环境没有 wow64 兼容层的坑,控件注册后能 100% 生效;
- 英雄无敌 3 是纯 32 位游戏,32 位 Wine 环境对它的兼容性是最优的;
- 避开了 64 位环境下「装了组件但 32 位兼容层识别不到」的问题。
应急方案(如果仍打不开 HD 启动器)
如果 HD 启动器还是有问题,直接用「无 HD 补丁的原版启动器」:
bash
运行
# 运行原版英雄无敌3主程序(跳过 HD 补丁,兼容性最好)
WINEPREFIX=~/.wine-homm3 wine ~/.wine32/drive_c/GOG\ Games/HoMM\ 3\ Complete/heroes3.exe
总结
- 核心问题:64 位 Wine 环境的 wow64 层无法正确加载 32 位 Common Controls 控件,导致 HD 启动器失败。
- 关键解法:创建纯 32 位 Wine 环境(~/.wine-homm3),在该环境下安装组件并注册控件。
- 最终操作:用
WINEPREFIX=~/.wine-homm3运行游戏,彻底避开 64 位兼容问题。
执行完这些步骤后,英雄无敌 3 应该能正常启动 —— 如果还有报错,只需要把新的日志贴出来,我再帮你微调(比如显卡渲染模式、声音组件等)。