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

保存时间:2026/4/3 19:24:54


Ubuntu 22.04 恢复WINE及提升游戏兼容性方案
内容由豆包 AI 生成
我的 Ubuntu 22.04,不知道怎么回事, WINE 突然没有了,导致我的旧的这个游戏都没办法运行了。这个,你给一个那个。叫什么? wineHQ 的那种安装吧,好像那个兼容性更好一点。
下面给你 Ubuntu 22.04 安装 WineHQ 稳定版 的完整步骤(官方源,兼容性最好)。

一、先启用 32 位架构(必须)

bash
运行
sudo dpkg --add-architecture i386

二、添加 WineHQ 官方密钥与源

bash
运行
# 下载密钥
sudo mkdir -pm755 /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key

# 添加 22.04 (jammy) 源
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources

三、更新并安装 WineHQ

bash
运行
sudo apt update
sudo apt install --install-recommends winehq-stable

四、验证安装

bash
运行
wine --version
# 应输出类似 wine-9.0 (stable)

五、初始化 Wine 环境(第一次用)

bash
运行
winecfg
会弹出配置窗口,一路确定即可(自动安装 Mono、Gecko 等依赖)。

六、运行你的游戏

bash
运行
wine /path/to/your/game.exe
或右键 exe → 用 Wine 打开。

可选:安装 Winetricks(装运行库,解决游戏报错)

bash
运行
sudo apt install winetricks
winetricks
可安装 vcrun2019、directx9、dotnet48 等,很多老游戏需要。

版本选择(按需)

  • 稳定版(推荐):winehq-stable
  • 开发版(新功能):winehq-devel
  • 测试版(更多补丁):winehq-staging
需要我帮你排查 Wine 安装后游戏仍无法运行的常见问题(如缺少运行库、显卡驱动、32/64 位冲突)吗?
参考 12 篇资料
nick@nick-sager:~/.wine32/drive_c/GOG Games/HoMM 3 Complete$ 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$
从你给出的报错信息来看,核心问题是 缺少 Microsoft Windows Common Controls (6.0.0.0) 组件(也就是我们常说的 MSCOMCTL.OCX/ ComCtl32),这是英雄无敌 3 HD Launcher 运行必需的控件。下面我给你分步解决这个问题,确保游戏能正常启动。

一、先安装必要的 Windows 运行库

winetricks 安装缺失的控件和运行库(这是解决这类问题最直接的方式):
bash
运行
# 先确保 winetricks 已安装
sudo apt install -y winetricks

# 针对你的 wine32 环境,安装 Common Controls 和其他必备运行库
WINEPREFIX=~/.wine32 winetricks comctl32=6.0.2900.2180 vcrun2005 vcrun2008 vcrun2010 dotnet20sp2

命令解释:

  • WINEPREFIX=~/.wine32:指定你的 wine 环境路径(因为你用的是 .wine32 而非默认的 .wine
  • comctl32=6.0.2900.2180:安装缺失的 Windows 通用控件 6.0 版本
  • vcrun2005/2008/2010:英雄无敌 3 HD 版需要的 VC++ 运行库
  • dotnet20sp2:部分 HD 启动器依赖 .NET 2.0

二、修复 Wine 环境的权限和注册表(可选但推荐)

有时候权限或注册表问题也会导致控件加载失败:
bash
运行
# 修复 wine32 环境的权限
sudo chown -R $USER:$USER ~/.wine32

# 重新初始化 winecfg(确保组件正确注册)
WINEPREFIX=~/.wine32 winecfg
运行 winecfg 后,在弹出的窗口中确认 Windows 版本(建议选 Windows XPWindows 7,英雄无敌 3 对这两个版本兼容性最好),然后点击确定。

三、重新运行游戏启动器

bash
运行
cd ~/.wine32/drive_c/GOG\ Games/HoMM\ 3\ Complete/
WINEPREFIX=~/.wine32 wine ./HD_Launcher.exe

额外解决思路(如果上述方法仍不行)

如果还是提示控件缺失,手动注册控件:
bash
运行
# 进入 system32 目录(32位 wine 环境)
cd ~/.wine32/drive_c/windows/system32/

# 注册 comctl32.ocx
WINEPREFIX=~/.wine32 wine regsvr32 comctl32.ocx

# 注册 mscomctl.ocx(如果有)
WINEPREFIX=~/.wine32 wine regsvr32 mscomctl.ocx

总结

  1. 核心问题:缺少 Windows Common Controls 6.0 控件,导致 HD 启动器无法加载。
  2. 关键解决步骤:用 winetricks 为指定的 .wine32 环境安装 comctl32 和相关 VC++ 运行库。
  3. 重要注意点:运行命令时必须指定 WINEPREFIX=~/.wine32,否则会操作默认的 wine 环境,无效。
如果操作后仍有报错,把新的错误信息贴出来,我再帮你针对性解决(比如显卡驱动、音频组件等其他常见问题)。
我的wine prefix是~/.wine nick@nick-sager:~$ WINEPREFIX=~/.wine winetricks comctl32=6.0.2900.2180 vcrun2005 vcrun2008 vcrun2010 dotnet20sp2 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 Unknown arg comctl32=6.0.2900.2180 Usage: /usr/local/bin/winetricks [options] [command|verb|path-to-verb] ... Executes given verbs. Each verb installs an application or changes a setting. Options: --country=CC Set country code to CC and don't detect your IP address -f, --force Don't check whether packages were already installed --gui Show gui diagnostics even when driven by commandline --gui=OPT Set OPT to kdialog or zenity to override GUI engine --isolate Install each app or game in its own bottle (WINEPREFIX) --self-update Update this application to the last version --update-rollback Rollback the last self update --no-clean Don't delete temp directories (useful during debugging) --optin Opt in to reporting which verbs you use to the Winetricks maintainers --optout Opt out of reporting which verbs you use to the Winetricks maintainers -q, --unattended Don't ask any questions, just install automatically -t --torify Run downloads under torify, if available --verify Run (automated) GUI tests for verbs, if available -v, --verbose Echo all commands as they are executed -h, --help Display this message and exit -V, --version Display version and exit Commands: list list categories list-all list all categories and their verbs apps list list verbs in category 'applications' benchmarks list list verbs in category 'benchmarks' dlls list list verbs in category 'dlls' fonts list list verbs in category 'fonts' settings list list verbs in category 'settings' list-cached list cached-and-ready-to-install verbs list-download list verbs which download automatically list-manual-download list verbs which download with some help from the user list-installed list already-installed verbs arch=32|64 create wineprefix with 32 or 64 bit, this option must be given before prefix=foobar and will not work in case of the default wineprefix. prefix=foobar select WINEPREFIX=/home/nick/.local/share/wineprefixes/foobar annihilate Delete ALL DATA AND APPLICATIONS INSIDE THIS WINEPREFIX nick@nick-sager:~$
看到你的报错了,核心问题有两个:一是 comctl32=6.0.2900.2180 这个写法不对(winetricks 不支持指定具体版本号),二是你的 Wine 环境是 64 位的,而英雄无敌 3 这类老游戏更适合 32 位 Wine 环境。下面我给你修正后的完整步骤:

一、先解决 winetricks 命令错误(通用修复)

先安装正确的通用控件和运行库(去掉版本号,用 winetricks 支持的标准写法):
bash
运行
# 针对你的 ~/.wine(64位)环境安装必备组件
WINEPREFIX=~/.wine winetricks comctl32 vcrun2005 vcrun2008 vcrun2010 dotnet20sp2
运行后会弹出安装窗口,一路默认即可(需要确认的地方选 “是”/“安装”)。

二、推荐:为英雄无敌 3 创建专属 32 位 Wine 环境(兼容性最好)

64 位 Wine 对老 32 位游戏兼容性不如纯 32 位环境,建议给英雄无敌 3 单独建 32 位环境:
bash
运行
# 1. 创建纯 32 位 Wine 环境(命名为 homm3,方便区分)
WINEARCH=win32 WINEPREFIX=~/.wine-homm3 winecfg

# 2. 为这个 32 位环境安装必备运行库(解决控件缺失问题)
WINEPREFIX=~/.wine-homm3 winetricks comctl32 vcrun2005 vcrun2008 vcrun2010 dotnet20sp2 dx9

# 3. 运行英雄无敌3 HD 启动器(用新的 32 位环境)
cd ~/.wine/drive_c/GOG\ Games/HoMM\ 3\ Complete/
WINEPREFIX=~/.wine-homm3 wine ./HD_Launcher.exe

三、额外:更新 winetricks(解决版本警告)

你的 winetricks 版本太旧,也可能导致兼容问题,更新一下:
bash
运行
# 备份旧版本
sudo mv /usr/local/bin/winetricks /usr/local/bin/winetricks-old

# 下载最新版
sudo wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks -O /usr/local/bin/winetricks

# 赋予执行权限
sudo chmod +x /usr/local/bin/winetricks

# 验证版本
winetricks --version

四、如果仍提示 Common Controls 缺失(手动注册控件)

bash
运行
# 进入 32 位环境的 system32 目录
cd ~/.wine-homm3/drive_c/windows/system32/

# 注册 comctl32.ocx
WINEPREFIX=~/.wine-homm3 wine regsvr32 comctl32.ocx

# 注册 mscomctl.ocx(英雄无敌3常需要)
WINEPREFIX=~/.wine-homm3 wine regsvr32 mscomctl.ocx

总结

  1. 命令错误原因comctl32=6.0.2900.2180 写法无效,winetricks 只需写 comctl32 即可自动安装适配版本。
  2. 核心优化:老 32 位游戏(如英雄无敌 3)建议用 WINEARCH=win32 创建纯 32 位 Wine 环境,兼容性远好于 64 位环境。
  3. 关键步骤:先安装 comctl32 等运行库,再用专属 32 位环境运行游戏启动器。
如果运行后还有报错,把新的错误信息贴出来,我再帮你排查(比如分辨率、注册表项等英雄无敌 3 的专属问题)。
nick@nick-sager:~$ # 针对你的 ~/.wine(64位)环境安装必备组件 WINEPREFIX=~/.wine winetricks comctl32 vcrun2005 vcrun2008 vcrun2010 dotnet20sp2 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 comctl32 comctl32 already installed, skipping Executing w_do_call vcrun2005 vcrun2005 already installed, skipping Executing w_do_call vcrun2008 vcrun2008 already installed, skipping Executing w_do_call vcrun2010 Executing load_vcrun2010 Executing cd /home/nick/.cache/winetricks/vcrun2010 Downloading https://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe to /home/nick/.cache/winetricks/vcrun2010 03/19 00:19:23 [NOTICE] Downloading 1 item(s) 03/19 00:19:23 [ERROR] CUID#7 - Download aborted. URI=https://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe Exception: [AbstractCommand.cc:351] errorCode=1 URI=https://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe -> [SocketCore.cc:1018] errorCode=1 SSL/TLS handshake failure: `not signed by known authorities or invalid' `issuer is not known' 03/19 00:19:23 [NOTICE] Download GID#aa4b76b490984397 not complete: /home/nick/.cache/winetricks/vcrun2010/vcredist_x86.exe Download Results: gid |stat|avg speed |path/URI ======+====+===========+======================================================= aa4b76|ERR | 0B/s|/home/nick/.cache/winetricks/vcrun2010/vcredist_x86.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/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe to /home/nick/.cache/winetricks/vcrun2010 03/19 00:19:29 [NOTICE] Downloading 1 item(s) [#0ebe66 0B/0B CN:1 DL:0B] 03/19 00:20:14 [ERROR] CUID#7 - Download aborted. URI=https://web.archive.org/web/2000/https://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe Exception: [AbstractCommand.cc:340] errorCode=2 Timeout. [#0ebe66 0B/0B CN:0 DL:0B] 03/19 00:20:15 [NOTICE] Download GID#0ebe66e0d5f4ea85 not complete: /home/nick/.cache/winetricks/vcrun2010/vcredist_x86.exe Download Results: gid |stat|avg speed |path/URI ======+====+===========+======================================================= 0ebe66|ERR | 0B/s|/home/nick/.cache/winetricks/vcrun2010/vcredist_x86.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/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe failed ------------------------------------------------------ nick@nick-sager:~$
从报错信息来看,核心问题是 winetricks 自动下载 vcrun2010 时遇到了网络 / SSL 证书问题,导致下载失败。我给你两种解决方案:优先用「离线手动安装」(最稳妥),备选「跳过 vcrun2010 直接运行游戏」(因为英雄无敌 3 HD 版可能只需要 vcrun2005/2008)。

方案一:手动下载并安装 vcrun2010(推荐,解决根本问题)

1. 手动下载 vcredist_x86.exe

打开浏览器,访问微软官方下载链接(复制到地址栏):
plaintext
https://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe
如果官方链接失效,用这个备用地址:
plaintext
https://archive.org/download/vcredist_x86_2010/vcredist_x86.exe
下载完成后,记住文件保存路径(比如 ~/Downloads/vcredist_x86.exe)。

2. 手动指定文件路径安装

bash
运行
# 进入 winetricks 缓存目录
mkdir -p ~/.cache/winetricks/vcrun2010/

# 把下载好的文件复制到缓存目录(替换成你实际的下载路径)
cp ~/Downloads/vcredist_x86.exe ~/.cache/winetricks/vcrun2010/

# 重新运行安装命令(此时会用本地文件,不下载)
WINEPREFIX=~/.wine winetricks vcrun2010

3. 验证所有运行库安装

bash
运行
# 检查已安装的组件
WINEPREFIX=~/.wine winetricks list-installed
能看到 comctl32vcrun2005vcrun2008vcrun2010dotnet20sp2 就说明安装成功。

方案二:跳过 vcrun2010,直接运行游戏(快速测试)

如果暂时下载不了 vcrun2010,先试试只依赖已安装的组件运行游戏(很多老游戏其实不需要 vcrun2010):
bash
运行
# 进入游戏目录
cd ~/.wine/drive_c/GOG\ Games/HoMM\ 3\ Complete/

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

# 如果 HD 启动器仍不行,试试直接运行游戏主程序(跳过 HD 补丁)
WINEPREFIX=~/.wine wine ./heroes3.exe

方案三:彻底解决网络下载问题(可选)

如果后续还需要用 winetricks 下载其他组件,修复系统 SSL 证书和网络:
bash
运行
# 更新系统证书
sudo apt update && sudo apt install -y ca-certificates
sudo update-ca-certificates

# 安装 aria2 替代默认下载工具(可选)
sudo apt install -y aria2

补充:32 位环境的离线安装(如果想切换到 32 位)

如果方案一 / 二都不行,想创建 32 位环境且避免下载:
bash
运行
# 1. 创建32位环境
WINEARCH=win32 WINEPREFIX=~/.wine-homm3 winecfg

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

# 3. 安装组件
WINEPREFIX=~/.wine-homm3 winetricks comctl32 vcrun2005 vcrun2008 vcrun2010 dotnet20sp2

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

总结

  1. 核心问题:winetricks 下载 vcrun2010 时遇到 SSL 证书 / 网络超时,导致安装中断。
  2. 最优解:手动下载 vcredist_x86.exe 到指定缓存目录,再重新运行 winetricks 安装。
  3. 快速测试:跳过 vcrun2010,直接用已安装的组件运行游戏主程序(heroes3.exe)。
如果运行游戏后还有新的报错(比如图形渲染、声音问题),把报错信息贴出来,我再帮你针对性解决。
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:~$
好消息是 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$
从日志来看,现在的核心问题是:你虽然装了 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位环境下如何安装游戏?
如何在纯32位环境下运行游戏?
纯32位环境和64位环境有什么区别?