尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Winetricks最新版安装指南:解决Wine运行库缺失问题

Winetricks最新版安装指南:解决Wine运行库缺失问题 在Linux上折腾Wine的人几乎都经历过同一个瞬间装好Wine双击某个Windows安装包或老游戏结果程序弹窗提示缺少d3dx9_43.dll、mfc140u.dll或者VCRUNTIME140.dll。新手的第一反应往往是去下载站搬一个dll文件丢进system32但这样处理十有八九会引入更诡异的错误比如程序能开了却频繁闪退或者干脆提示无法定位程序输入点。Winetricks就是专门解决这类缺东少西问题的工具它把Wine环境里常见的VC运行库、DirectX组件、字体、游戏依赖统一管起来一条命令就能装齐整个组件集合不用手动去翻各种来源不明的网站。这篇文章不聊虚的只讲Winetricks最新版本怎么装、装完怎么验证、日常怎么更新以及我实际使用中踩过的坑和排查思路。不管你是刚接触Wine的Linux新手还是准备把手头几十个Wine前缀重新整理一遍的老用户都可以顺着这条路径走一遍。1. Winetricks是什么装了Wine还不够这事得说透1.1 Wine管翻译Winetricks管零件Wine本质上是一个兼容层把Windows程序调用API的请求翻译成Linux系统能理解的操作。但Windows程序运行时不只依赖系统内置的API很大一部分要借外部运行库比如不同年份的Microsoft Visual C Redistributable、.NET Framework、DirectX的各个版本以及某些游戏引擎专属的PhysX、XACT音频组件。这些组件并不是Wine的源码里都内置好的Wine官方也不可能把所有版本的运行库全部打包进一个兼容层里所以就需要另一套工具在Wine环境里手动补装这些零件。Winetricks就是一个辅助Wine的Shell脚本它不是Wine的替代品而是Wine的配件管理器。它做的事情可以概括为从一个较为可信的来源下载官方或半官方的安装程序在指定前缀prefix中按正确的架构和顺序静默安装再写入对应的注册表项。这里的前缀概念后面会详细展开你可以先理解成每一个前缀就是一个独立的Windows运行环境Winetricks的每个动作都是针对某个前缀生效的。1.2 一个真实场景缺dll的你我印象最深的一次是朋友让我帮他跑一个老旧的Windows记账软件Wine版本已经更新到了当时最新的Staging版但双击exe后直接弹出错误框提示缺少MSVBVM50.DLL。这个dll属于Visual Basic 5.0运行库属于非常老的组件了Wine默认环境里显然不会带。我当时的第一反应不是去下载站碰运气而是直接在终端里执行winetricks vb6run等脚本跑完再启动这个记账软件一切正常。整个过程不超过一分钟比我手动下载dll文件、再想办法注册到system32里要可靠得多。这背后其实是一件很重要的事从乱七八糟的dll站点下载的文件没有签名校验极容易被替换成带毒版本而Winetricks的组件清单大多指向微软官方下载地址或官方归档地址可信度高出一大截。1.3 Winetricks到底管理了哪些组件Winetricks管理的组件可以粗暴分成六大类我按日常使用频率排序类别典型条目适用场景微软运行库vcrun2005 / vcrun2012 / vcrun2022、dotnet40 / dotnet48几乎所有Windows应用程序和游戏都需要游戏依赖dxvk、directx9、PhysX、xact、xinput老游戏、D3D游戏、依赖D3D9的软件字体corefonts、cjkfonts、tahoma、meiryo解决中文乱码、界面字体缺失系统组件msxml3 / msxml6、riched20 / riched30、mfc42企业软件、老旧办公软件、安装包制作工具浏览器引擎ie8、firefox极少数必须依赖旧IE内核的程序不推荐乱装其他windowscodecs、wmp11、quicktime76多媒体程序、图片处理插件判断一个组件该不该装标准很简单看程序报错的dll名称或者看程序官方文档里写了依赖什么环境。不要一次性勾选一大堆组件装得越多越容易引入版本冲突。这也是Winetricks最核心的哲学——你需要什么就装什么跟大多数Linux发行版的哲学是一样的。2. 动手安装前三个前置问题先想清楚在正式下载Winetricks脚本之前有比版本号更重要的前置条件顺序错了后面会多花不少冤枉时间。2.1 你的Wine装好了吗版本对吗Winetricks本身只是一个包装脚本它的工作是调用Wine去安装组件。所以Wine必须已经存在并且能在PATH里被找到。你可以用下面这个命令确认wine --version如果终端提示command not found说明Wine没有安装或者安装路径不对。这里要提醒一句Winetricks对Wine的版本是有要求的新版Winetricks在启动时会检查Wine版本如果太低它会直接拒绝运行并提示Your wine version is too old。发行版自带的Wine版本通常都比较保守尤其是Debian系很可能停留在几个大版本之前。想装Wine请优先选择WineHQ官方仓库或者Wine-Staging包。Staging版本是在Wine主线基础上打了大量实验补丁的构建兼容性往往比主线更好但遇到问题的概率也略高。到底选哪个取决于你跑的程序类型。如果某个程序是要长期使用的我会建议先用稳定版Wine测试不行再切Staging。2.2 GUI依赖zenity和qarma的分工Winetricks的运行方式有GUI和CLI两种。GUI模式实际依赖zenity或者某些发行版上的qarma。zenity是GNOME系列常见的图形对话框工具qarma则是基于Qt的替代品。很多情况下双开Winetricks没有反应就是因为GUI库没有装。# Debian/Ubuntu sudo apt install zenity # Fedora/RHEL sudo dnf install zenity # Arch Linux sudo pacman -S zenity但请注意zenity只是Winetricks图形界面所需的前置库真正的安装动作仍然由Wine完成。另外我个人的习惯是能用CLI尽量用CLI。命令行模式下参数更明确输出更透明出错了也知道是哪个环节挂的。CLI模式并不依赖zenity所以纯服务器或者精简桌面环境也能用。2.3 为什么强烈建议用最新版很多人会在这一步问直接apt install winetricks不就行了吗为什么非要折腾最新版本安装原因在于Winetricks其实有两个层面的更新一是脚本本身的版本二是脚本内置的组件清单。组件清单会随着Wine的版本演变而不断调整比如某个新的游戏需要一个新的verb组件安装脚本条目旧版Winetricks可能根本没有这个条目哪怕你手动把dll下载下来它也不会智能地处理依赖关系。我试过在Debian稳定仓库里装了一个年份比较早的Winetricks结果想装vcrun2022时它直接提示这个组件名不存在。因为那个版本发布的时候VC 2022运行库还没被加入清单。这就是最新版本安装价值的直接体现脚本本体能跑还不算组件清单也得够新否则关键时刻照样抓瞎。3. 最新版安装实操推荐按这条路径走下面进入正题三种可行的安装方式。我按推荐程度排序同时也把每条路径的坑点讲清楚。3.1 方式一下载官方release脚本推荐大多数用户Winetricks以单文件Shell脚本的形态发布最新release版本在GitHub Releases页面可以看到文件是一个无后缀名的winetricks脚本版本号命名规则通常类似日期格式比如20230101之类的序列。你可以直接拉取官方latest下载链接# 创建用户级bin目录 mkdir -p ~/bin # 下载脚本本体 curl -LO https://github.com/Winetricks/winetricks/releases/latest/download/winetricks # 赋予执行权限 chmod x winetricks # 移动到用户bin目录 mv winetricks ~/bin/然后确保~/bin在PATH中。如果你用的是bash可以在~/.bashrc里加上export PATH$HOME/bin:$PATH最后执行source ~/.bashrc winetricks --version如果输出里能看到Winetricks的版本号和commit hash说明安装成功。这里额外做一步校验会更稳妥。下载下来的脚本可以算一下SHA256然后到release页面的checksum文件里比对一下值是否一致sha256sum winetricks有同学嫌麻烦会跳过这步但在自动下载脚本并执行的前提下做一次哈希校验就几十秒的事能避免很多不必要的麻烦。3.2 方式二Git克隆开发版适合想尝鲜的人想体验Winetricks的最新开发特性或者官方release里还没有你需要的组件时用Git直接克隆仓库是更合适的方式。git clone https://github.com/Winetricks/winetricks.git ~/winetricks-git克隆下来的仓库中真正提供给用户运行的是src/winetricks而不是仓库根目录下的包装脚本。你可以直接运行~/winetricks-git/src/winetricks --version输出中大概率会带上-next标记意味着这是开发版。开发版的好处是组件清单更新非常及时比如某个新游戏刚需要新的依赖release版还要等打包流程开发版可能当天就加了条目。缺点也一样明显它没有经过release渠道的完整回归测试个别组件安装脚本可能存在临时的bug。如果你决定长期使用开发版可以把它也安装到~/bin或者/usr/local/binsudo cp ~/winetricks-git/src/winetricks /usr/local/bin/之后每隔一段时间手动重新克隆或者git pull拉取更新就行。但我不建议这样长期用通常还是老老实实装release版等开发版稳定后合并到release再说。这种方式更适合用来临时解决某个特定问题。3.3 方式三发行版包管理器安装图省事的选择不同发行版的包管理器都收录了winetricks安装命令各有不同# Debian / Ubuntu / Linux Mint sudo apt install winetricks # Fedora / RHEL / CentOS sudo dnf install winetricks # Arch Linux / Manjaro sudo pacman -S winetricks # openSUSE sudo zypper install winetricks用包管理器安装是最省心也是最不容易出错的路径。包的依赖关系会被自动处理比如zenity会在必要时自动装好shell脚本的shim机制也都会配置好。但代价是版本滞后这类仓库的更新节奏一般比Winetricks官方慢很多延迟从几周到几个月都有可能Arch可能稍好一些。如果你的核心需求只是装几个常用的运行库对最新组件的支持要求不高那直接用包管理器毫无问题。但如果你经常折腾新游戏、新应用还是推荐走release脚本下载这条路。3.4 三条路怎么选我把三种方式的对比总结成一张表方便你根据自己情况选择对比维度官方release脚本Git克隆开发版发行版包管理器版本新鲜度最新release版只落后开发版最前沿包含未发布条目滞后程度视发行版而定安装难度低中极低更新方式手动下载覆盖或--self-updategit pull系统升级时自动更新适合人群绝大多数用户爱尝鲜、有特定组件需求图省事、懒得管版本风险程度低中可能遇到临时bug低但功能可能不全我自己的主力方案是方式一同时在需要调试某个新组件的时候临时准备一份方式二的开发版脚本放到另一个目录里用完整路径去调用。这样两条路径互不干扰出问题随时回退。4. 验证版本与更新别装了就跑版本机制要搞懂安装完成不算结束你得知道这个Winetricks是什么版本、什么渠道以及将来怎么更新。4.1 看版本号winetricks --version和-V执行winetricks --version或者winetricks -V会输出类似这样的内容Winetricks 20240415-next - sha256: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - next版本号后面的-next就表示当前是开发版没有这个标记的通常是release版。后面的SHA256是脚本自身内容的校验值用于确认当前脚本来源。这个值在你自己手动下载release包的时候可以用来比对GitHub页面的校验信息。另外我在实际使用中发现winetricks --version这个命令本身不需要Wine参与哪怕当前系统没有装Wine它也能正常输出版本号。所以如果命令毫无反应说明脚本本身可能没装好先检查文件权限和路径。4.2 --self-update它到底更新了什么Winetricks内置了一个自我更新的命令winetricks --self-update它的原理并不复杂从GitHub仓库拉取最新release的winetricks脚本本体然后直接覆盖当前正在执行的脚本文件最后用新脚本重新运行。这个机制在实际使用中非常方便但也藏着几个容易踩的坑第一当前脚本文件必须有写权限。如果Winetricks位于/usr/local/bin普通用户没有写入权限自更新会失败。你不能用sudo winetricks --self-update来绕权因为执行脚本时sudo会改变脚本的运行环境自更新过程中可能造成权限错乱。第二如果你是用发行版包管理器安装的winetricks我不建议用--self-update。这会绕过包管理器的版本追踪接下来的系统更新可能会把脚本覆盖回仓库版本造成版本号倒退回旧版甚至出现文件冲突。第三在某些网络环境下从GitHub拉取脚本可能会超时或失败。这时候不用慌脚本会在终端提示update失败原有版本不受影响。另外一种稳妥的做法就是回到方式一手动下载最新release脚本再覆盖一遍。考虑到自更新的这些限制我的日常做法是放在~/bin的用户级脚本偶尔执行--self-update/usr/local/bin里的系统级脚本全部手动下载覆盖不依赖自更新机制。4.3 更新后旧前缀要不要重建这是问得特别多的一个问题。答案是Winetricks脚本更新本身不会影响已经建好的Wine前缀因为前缀是一个独立的目录里面已经装好的组件不会因为脚本升级而自动重装也不需要重装。但有一种情况需要格外注意如果你升级了Wine的大版本又更新了Winetricks然后发现原本正常的前缀突然变得不稳定那大概率不是Winetricks的问题而是Wine大版本切换导致的。这时候我会按这个顺序排查先把Wine环境切回旧版本看是否恢复如果恢复就是兼容层本身的问题如果旧版本也有问题再去检查前缀里的组件是否因为使用旧版Winetricks安装时留下了不完整的注册表项。最后的手段才是重建前缀因为这个操作成本最高重建后所有组件都要从头再装一遍。5. 最新版到手后先跑一遍这个流程创建前缀与安装组件装好最新版Winetricks之后别急着去折腾那些高度复杂的组件先把骨架搭起来。5.1 搞懂前缀、WINEPREFIX和WINEARCH前缀是Wine里最容易混淆的概念。简单理解一个前缀就是一个模拟的Windows C盘目录里面带了独立的注册表文件system.reg、user.reg等、drive_c目录、已经安装好的Windows组件。你给某个软件建一个专属前缀就能把它的运行环境完全隔离互不干扰。创建前缀不一定要用winetricks用Wine本身就可以# 创建一个64位前缀 export WINEPREFIX$HOME/wineprefixes/dev wineboot -u但Winetricks的价值在于在创建前缀之后你能方便地往里补组件。在创建前缀前最好想清楚用32位还是64位前缀架构WINEARCH值适用场景32位win32大量老游戏、老旧财务/办公软件64位win64现代应用、新版游戏判断原则很简单如果程序是老旧的32位exe优先创建32位前缀不要想着64位能向下兼容所有32位程序在Wine环境下64位前缀对32位组件的支持有时候会怪怪的。创建32位前缀的命令是export WINEARCHwin32 export WINEPREFIX$HOME/wineprefixes/game32 wineboot -u5.2 用Winetricks装组件的命令示例前缀建好之后就可以用Winetricks往里装组件了。以最常见的需求为例安装VC运行库、DirectX 9和核心字体export WINEPREFIX$HOME/wineprefixes/game32 winetricks --quiet vcrun2019 directx9 corefonts这里的--quiet参数很关键它会让Winetricks直接进入静默安装模式不要每一步都弹交互窗口来问你确认要装这个吗适合一次性批量安装多个组件。注意组件名是区分大小写的写错会提示找不到条目大小写不敏感的说法是要尽量避免的。装完之后可以用下面这个命令检查当前前缀加了哪些组件记录winetricks list-installed每一行会显示一个组件的名称和安装状态。如果列表里有你刚才装的那些条目说明已经安装到位。另外如果你第一次用GUI模式打开winetricks后界面左侧是组件分类树右侧是具体条目勾选完点OK就会自动进入安装流程。但GUI模式有一个小毛病它默认安装到当前环境变量里的WINEPREFIX如果没设置就会装到~/.wine这个默认前缀。我见过很多新人在这里翻车——明明建了新的前缀GUI却把组件装到了默认前缀里。5.3 报错排查五个高频警告与应对方法无论安装方式多正确实际操作中总会遇到报错。我挑五个出现频率最高的问题逐个拆解报错/现象可能原因对症下药wine: command not foundWine未安装或不在PATH中先确认wine --version能正常输出再把Wine的bin目录加入PATHYour wine version is too oldWine版本过低无法满足脚本要求升级到WineHQ源提供的最新稳定版/Staging版cannot find zenityGUI前置库缺失安装zenity或者改用winetricks --cli模式Downloading ... failed网络不稳定或组件原始URL失效重试查看~/.cache/winetricks下缓存文件组件若来自第三方源注意官方是否更换了地址安装过程卡住无输出安装程序挂起或等待用户交互加--verbose看详细输出改用静默安装参数再试必要时关闭当前所有Wine进程后重试这里的第4个坑最隐蔽。Winetricks下载组件主要靠curl或wget有些大型组件包比如.NET Framework动辄几十上百兆下载时间本来就长出错后重试会浪费时间。我一般的操作是先把组件包的URL取出来检查网络连通情况再把下载好的文件放到~/.cache/winetricks/对应目录这样Winetricks重新安装时会直接读取缓存而不会再次下载。排查任何Winetricks相关的疑难杂症最通用的套路是加--verbose跑一遍完整日志会精确告诉你它在哪一步执行了什么命令、失败的错误码是什么。别嫌输出太长错误往往就藏在那几十行里。如果连--verbose都看不出问题还可以在当前用户目录下找Winetricks的调试日志或者用sh -x直接跟踪脚本执行过程但那就是硬核排障了日常遇到的九成问题到不了这一步。说了这么多Winetricks安装这件事真正要理清的其实就是版本渠道、前置依赖、PATH环境、前缀架构这四条线。我最初接触Wine时也踩过用sudo winetricks --self-update导致权限混乱的坑也经历过把一堆组件盲目装进默认前缀然后互相打架的教训。后来养成了一套固定习惯每个程序一个独立前缀装组件前先看文档或报错确认需要的是什么再针对性地用quiet模式安装最后用list-installed核对收尾。这样一套流程走下来Winetricks基本很少再给我带来麻烦。如果你正准备装最新版Winetricks先按文中的方式选好安装路径建好前缀再做组件安装大概率能避开大多数新手弯路。
返回列表