Ubuntu 22.04 恢复WINE及提升游戏兼容性方案

导出时间:2026/5/27 19:29:19

来源地址:https://www.doubao.com/chat/38417616031407618

消息数量:4

从日志来看,现在的核心问题是:你虽然装了 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

总结

  1. 核心问题:64 位 Wine 环境的 wow64 层无法正确加载 32 位 Common Controls 控件,导致 HD 启动器失败。
  2. 关键解法:创建纯 32 位 Wine 环境(~/.wine-homm3),在该环境下安装组件并注册控件。
  3. 最终操作:用 WINEPREFIX=~/.wine-homm3 运行游戏,彻底避开 64 位兼容问题。
执行完这些步骤后,英雄无敌 3 应该能正常启动 —— 如果还有报错,只需要把新的日志贴出来,我再帮你微调(比如显卡渲染模式、声音组件等)。
好消息是 32 位的 vcrun2010 已经安装成功了(你能看到 wine vcredist_x86.exe 执行的过程),现在报错的是 64 位的 vcredist_x64.exe 下载失败 —— 但这对英雄无敌 3(32 位游戏)来说完全不重要,我们可以直接忽略这个 64 位组件的下载失败,直接去运行游戏就行。

现在直接运行英雄无敌 3(核心步骤)

bash
运行
# 进入游戏目录
cd ~/.wine/drive_c/GOG\ Games/HoMM\ 3\ Complete/

# 用你的 ~/.wine 环境运行 HD 启动器
WINEPREFIX=~/.wine wine ./HD_Launcher.exe

# 如果 HD 启动器还是打不开,直接运行游戏主程序(绕过 HD 补丁)
# WINEPREFIX=~/.wine wine ./heroes3.exe

为什么可以忽略 64 位 vcrun2010 下载失败?

  • 英雄无敌 3 是纯 32 位游戏,只需要 32 位 的 vcrun2010(vcredist_x86.exe),64 位版本(vcredist_x64.exe)对它来说没用。
  • 从你的日志能看到:wine vcredist_x86.exe 已经执行完成(虽然有一些 Wine 无关的 fixme 警告),32 位运行库已经装好了。

额外优化(如果游戏仍有小问题)

如果运行游戏时出现界面错乱、按钮点不了等问题,给 Wine 环境设置成 Windows 7 兼容模式:
bash
运行
# 打开 Wine 配置窗口
WINEPREFIX=~/.wine winecfg
在弹出的窗口中:
  1. 顶部选择「Windows Version」(Windows 版本)
  2. 下拉菜单选择 Windows 7(别选最新的 Windows 10/11,兼容性差)
  3. 点击「Apply」→「OK」保存

终极方案:如果 64 位环境还是有问题(切换到纯 32 位环境)

如果上述操作后游戏还是无法运行,直接用纯 32 位环境(避开 64 位相关的所有问题):
bash
运行
# 1. 创建纯32位 Wine 环境(命名为 homm3)
WINEARCH=win32 WINEPREFIX=~/.wine-homm3 winecfg

# 2. 安装32位必备组件(只装32位,不会触发64位下载)
WINEPREFIX=~/.wine-homm3 winetricks comctl32 vcrun2005 vcrun2008 dotnet20sp2

# 3. 复制手动下载的 vcredist_x86.exe 到32位环境的缓存目录
mkdir -p ~/.cache/winetricks/vcrun2010/
cp ~/Downloads/vcredist_x86.exe ~/.cache/winetricks/vcrun2010/

# 4. 安装32位 vcrun2010(纯32位环境不会下载64位版本)
WINEPREFIX=~/.wine-homm3 winetricks vcrun2010

# 5. 运行游戏
cd ~/.wine/drive_c/GOG\ Games/HoMM\ 3\ Complete/
WINEPREFIX=~/.wine-homm3 wine ./HD_Launcher.exe

总结

  1. 关键结论:32 位 vcrun2010 已安装成功,64 位版本下载失败无需关注,不影响游戏运行。
  2. 下一步操作:直接运行游戏启动器(HD_Launcher.exe),优先用现有 64 位环境测试。
  3. 兜底方案:若仍有问题,切换到纯 32 位 Wine 环境(~/.wine-homm3),彻底避开 64 位相关问题。
你现在先执行运行游戏的命令,看看能不能正常启动;如果还有新的报错(比如图形、声音相关),把新的错误信息贴出来,我再帮你解决。
nick@nick-sager:~/.wine32/drive_c/GOG Games/HoMM 3 Complete$ WINEPREFIX=~/.wine wine ./HD_Launcher.exe 002c:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 0088:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 0080:fixme:seh:WerSetFlags (2) stub 0080:fixme:heap:RtlSetHeapInformation HEAP_INFORMATION_CLASS 1 not implemented! 0094:fixme:process:SetProcessShutdownParameters (00000380, 00000000): partial stub. 0094:fixme:ntdll:EtwEventSetInformation (deadbeef, 2, 00006FFFFAE525B7, 28) stub 0094:fixme:ver:GetCurrentPackageId (00007FFFFF01EB50 0000000000000000): stub 00b8:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION 00b8:fixme:seh:WerSetFlags (2) stub 00b8:fixme:heap:RtlSetHeapInformation HEAP_INFORMATION_CLASS 1 not implemented! 00d8:fixme:process:SetProcessShutdownParameters (00000380, 00000000): partial stub. 00d8:fixme:ntdll:EtwEventSetInformation (deadbeef, 2, 79793241, 28) stub 00d8:fixme:ver:GetCurrentPackageId (013FECCC 00000000): stub 0024:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 0024:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 0024:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 0024:err:commdlg:DllMain failed to create activation context, last error 14001 0024:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 0024:fixme:ver:GetCurrentPackageId (0054FEB4 00000000): stub nick@nick-sager:~/.wine32/drive_c/GOG Games/HoMM 3 Complete$
nick@nick-sager:~$ # 进入 winetricks 缓存目录 mkdir -p ~/.cache/winetricks/vcrun2010/ # 把下载好的文件复制到缓存目录(替换成你实际的下载路径) cp ~/Downloads/vcredist_x86.exe ~/.cache/winetricks/vcrun2010/ # 重新运行安装命令(此时会用本地文件,不下载) WINEPREFIX=~/.wine winetricks vcrun2010 Executing cd /usr/local/bin ------------------------------------------------------ warning: You are running winetricks-20250102-next, latest upstream is winetricks-20260125! ------------------------------------------------------ ------------------------------------------------------ warning: You should update using your distribution's package manager, --self-update, or manually. ------------------------------------------------------ ------------------------------------------------------ warning: You are using a 64-bit WINEPREFIX. Note that many verbs only install 32-bit versions of packages. If you encounter problems, please retest in a clean 32-bit WINEPREFIX before reporting a bug. ------------------------------------------------------ ------------------------------------------------------ warning: You appear to be using Wine's new wow64 mode. Note that this is EXPERIMENTAL and not yet fully supported. If reporting an issue, be sure to mention this. ------------------------------------------------------ Using winetricks 20250102-next - sha256sum: 7f29a4ec7c559af18e88f1c0d012c2b0873c5228158511c3b5f4c9b127b9a733 with wine-11.0 and WINEARCH=win64 Executing w_do_call vcrun2010 Executing load_vcrun2010 Using native,builtin override for following DLLs: msvcp100 msvcr100 vcomp100 atl100 Executing wine C:\windows\syswow64\regedit.exe C:\windows\Temp\_vcrun2010\override-dll.reg 0204:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 0204:fixme:ver:GetCurrentPackageId (006FFECC 00000000): stub Executing wine C:\windows\regedit.exe C:\windows\Temp\_vcrun2010\override-dll.reg 0214:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 021c:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) Executing cd /home/nick/.cache/winetricks/vcrun2010 Executing wine vcredist_x86.exe 0224:fixme:clusapi:GetNodeClusterState ((null),0042EC64) stub! 0224:fixme:advapi:DecryptFileA ("c:\\ffe8fa28acae8179f5d0eb1adac4f705\\", 00000000): stub 0230:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 0230:fixme:ntdll:EtwRegisterTraceGuidsW register trace class {e2821408-c59d-418f-ad3f-aa4e792aeb79} 0230:fixme:heap:RtlSetHeapInformation HEAP_INFORMATION_CLASS 1 not implemented! 0230:fixme:heap:RtlSetHeapInformation HEAP_INFORMATION_CLASS 1 not implemented! 0230:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION 0230:fixme:security:GetWindowsAccountDomainSid (0051F3E4 003E32B4 0051F3E0): semi-stub 0230:fixme:secur32:GetComputerObjectNameW NameFormat 7 not implemented 0230:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0) 0230:err:commdlg:DllMain failed to create activation context, last error 14001 0230:fixme:msxml:domdoc_putref_schemas (00CDE6B0)->(0051F4DC {VT_DISPATCH: 00D4CF6C}): semi-stub 0230:fixme:msxml:domdoc_get_readyState stub! (00CDE6B0)->(0051F4A4) 0230:fixme:shell:MLSetMLHInstance (71590000,7A340000) stub 0230:fixme:shell:MLIsMLHInstance (10000000) stub 0230:fixme:shell:MLIsMLHInstance (10000000) stub 0230:fixme:shell:MLIsMLHInstance (10000000) stub 0230:fixme:shell:MLIsMLHInstance (10000000) stub 0230:fixme:shell:MLClearMLHInstance (0x71590000)stub 0238:fixme:cryptasn:CryptDecodeObjectEx Unsupported decoder for lpszStructType 1.3.6.1.4.1.311.2.1.4 0238:fixme:cryptasn:CryptDecodeObjectEx Unsupported decoder for lpszStructType 1.3.6.1.4.1.311.2.1.4 0238:fixme:wintrust:SOFTPUB_VerifyImageHash Cannot verify hash for pszObjId="1.3.6.1.4.1.311.2.1.25" 0238:fixme:file:NtLockFile I/O completion on lock not implemented yet 0238:fixme:cryptasn:CryptDecodeObjectEx Unsupported decoder for lpszStructType 1.3.6.1.4.1.311.2.1.4 0238:fixme:cryptasn:CryptDecodeObjectEx Unsupported decoder for lpszStructType 1.3.6.1.4.1.311.2.1.4 0238:fixme:wintrust:SOFTPUB_VerifyImageHash Cannot verify hash for pszObjId="1.3.6.1.4.1.311.2.1.30" 0230:fixme:security:GetWindowsAccountDomainSid (0051F230 003E32B4 0051F22C): semi-stub 0230:fixme:secur32:GetComputerObjectNameW NameFormat 7 not implemented Executing cd /home/nick/.cache/winetricks/vcrun2010 Downloading https://download.microsoft.com/download/A/8/0/A80747C3-41BD-45DF-B505-E9710D2744E0/vcredist_x64.exe to /home/nick/.cache/winetricks/vcrun2010 03/19 00:22:32 [NOTICE] Downloading 1 item(s) 03/19 00:22:32 [ERROR] CUID#7 - Download aborted. URI=https://download.microsoft.com/download/A/8/0/A80747C3-41BD-45DF-B505-E9710D2744E0/vcredist_x64.exe Exception: [AbstractCommand.cc:351] errorCode=1 URI=https://download.microsoft.com/download/A/8/0/A80747C3-41BD-45DF-B505-E9710D2744E0/vcredist_x64.exe -> [SocketCore.cc:1018] errorCode=1 SSL/TLS handshake failure: `not signed by known authorities or invalid' `issuer is not known' 03/19 00:22:32 [NOTICE] Download GID#b2d41c897d740f29 not complete: /home/nick/.cache/winetricks/vcrun2010/vcredist_x64.exe Download Results: gid |stat|avg speed |path/URI ======+====+===========+======================================================= b2d41c|ERR | 0B/s|/home/nick/.cache/winetricks/vcrun2010/vcredist_x64.exe Status Legend: (ERR):error occurred. aria2 will resume download if the transfer is restarted. If there are any errors, then see the log file. See '-l' option in help/man page for details. Executing cd /home/nick/.cache/winetricks/vcrun2010 Downloading https://web.archive.org/web/2000/https://download.microsoft.com/download/A/8/0/A80747C3-41BD-45DF-B505-E9710D2744E0/vcredist_x64.exe to /home/nick/.cache/winetricks/vcrun2010 03/19 00:22:38 [NOTICE] Downloading 1 item(s) [#5956c7 0B/0B CN:1 DL:0B] 03/19 00:23:23 [ERROR] CUID#7 - Download aborted. URI=https://web.archive.org/web/2000/https://download.microsoft.com/download/A/8/0/A80747C3-41BD-45DF-B505-E9710D2744E0/vcredist_x64.exe Exception: [AbstractCommand.cc:340] errorCode=2 Timeout. [#5956c7 0B/0B CN:0 DL:0B] 03/19 00:23:24 [NOTICE] Download GID#5956c79ba9ab1254 not complete: /home/nick/.cache/winetricks/vcrun2010/vcredist_x64.exe Download Results: gid |stat|avg speed |path/URI ======+====+===========+======================================================= 5956c7|ERR | 0B/s|/home/nick/.cache/winetricks/vcrun2010/vcredist_x64.exe Status Legend: (ERR):error occurred. aria2 will resume download if the transfer is restarted. If there are any errors, then see the log file. See '-l' option in help/man page for details. ------------------------------------------------------ warning: Downloading https://web.archive.org/web/2000/https://download.microsoft.com/download/A/8/0/A80747C3-41BD-45DF-B505-E9710D2744E0/vcredist_x64.exe failed ------------------------------------------------------ nick@nick-sager:~$