网站首页 > 技术文章 正文
之前一直用在Ubuntu下用微信,基本上功能可用,但是存在几个问题:
- 切换到其他应用窗口后,微信窗口边框留有残影。
- 手残升级微信到3.9.9之后,经常出现崩溃退出微信。
- 有时候输入框光标消失,发送表情问题提示不能发送空信息。
- 小程序和链接打开后崩溃。
- 有时候缺少字体导致显示不正常。
刚好五一假期有点空闲就整治一下笔记本电脑,顺便把微信的这些小问题一并解决了。
以前解决这些问题都是各种网站上搜索,这次既然要整治就从根本上定位问题根源并给出完美解决方案。所谓从根本上定位就是要找到代码级问题且逻辑自洽。首先第一步就是要能够从源码编译,方便后期修改代码后查看效果。
Wine的文档质量还是非常不错的,非常详细和准确。按照文档说明一步一步操作就能够编译成功。关键点是参考:
- 编译说明文档:Building Wine - WineHQ Wiki
- 我个人是把64位和32位都做了编译,也就是WoW64模式。
- 特别注意看编译文档中的依赖满足部分,仔细点添加开发依赖就行。
考虑到经常要编译,为了偷懒不用每次都安装包就打包成为一个docker并且把依赖环境这些都准备好放在github(大家觉得有空也欢迎大家加星):
具体编译脚本build.sh没有放到docker里面,该脚本主要就是编译64位wine,安装/替换32位开发环境(由于部分环境跟64位开发环境冲突),编译32位环境三部分。大家根据自己需要操作。
接下来就是每个问题予以解决:
- 转移窗口焦点后有边框残影。
这个问题早有其他人给出了解决方案,具体参考patch文件:
repo/archlinuxcn/wine-for-wechat/wine-wechat.patch at master · archlinuxcn/repo · GitHub
由于版本不同,这个patch的位置可能会有不对。自行参考后正确修改dlls/user32/win.c文件。9.7版本的是在470行左右CreateWindowExW函数体内添加。
- 新版本微信崩溃问题
这个问题我在升级到新版本3.9.9后发现,之前的版本应该是比较老了(3.8?不确定),由于一直好用也没有怎么动。结果手残升级后发现运行一段时间就崩溃,每次也不确定运行多久就崩溃。
那没有办法,逢山开路遇水搭桥。最直接方式就是抓backtrace。
这里必须赞一下wine的文档,非常详细都不用花费脑细胞到处查找,winedbg的例子就是如何在crash时候断点。具体参考:Winedbg - WineHQ Wiki
然后放着等断点触发后查看,主要是微信3.9.9版本后调用FindFirstFileNameW函数,但是这个函数在wine里面暂时没有实现。
问题找到了就好办,没有实现咱们就给他“实现”呗,反正wine就是一个模拟器,微信我也是主要用基本功能。
下面就是具体的修改方法:
- 主要涉及两个dll:kernel32.dll和kernalbase.dll。
- 首先要打开接口,核心实现是在kernalbase,但是在kernal32里面也需要有这个接口定义。原因是kernel32主要负责面向应用层接口。具体我就不详细写了,大家对照着截图中的文件行数自己根据实际情况修改。
- 至此修改完成,重新编译后安装就可以正常运行了。
此外,还遇到微信小程序和链接无法正常打开。最后参考网上答案予以解决:
步骤一、在微信主界面搜索框内输入:
:showcmdwnd
后回车,会弹出一个命令行窗口,然后在窗口中输入以下命令强制更新插件:
/plugin set_grayvalue=203&set_config_url=https://dldir1.qq.com/weixin/Windows/XPlugin/updateConfigWin.xml&check_update_force
具体应该使用哪一个grayvalue请大家查找具体文档。
其他的问题都比较常见了,大家自行网上寻找答案就是。
等后面有空再把这些patch文件整合到脚本中。希望这篇文章能够帮到大家在Linux下面顺畅运行微信。
猜你喜欢
- 2025-07-23 打造一个导航主页竟然如此容易?对!用腾讯云轻量服务器
- 2025-07-23 Vue、Nuxt服务端渲染、NodeJS全栈项目
- 2025-07-23 局域网秒传神器(局域网秒传神器怎么用)
- 2025-07-23 电脑太老了怎样更新系统(电脑太老能升级系统吗)
- 2025-07-23 还在用Jenkins?试试这款面向DevOps的自动化部署工具吧,贼带劲
- 2025-07-23 酸甜可口“乌莓派”——Ubuntu+Raspberry Pi魔镜之旅(一)
- 2025-07-23 群晖DS213j-小白的NAS之路 篇二:网页和本机电影播放+磁盘阵列SHR转BASIC
- 2025-07-23 安装VMware Tools教程详解(经过实测,确保可用)
- 2025-07-23 使用了一年半的Linux,关于我的感受
- 2025-07-23 手把手教你如何上传代码到gitee服务器
- 最近发表
-
- Qt编程进阶(63):Qt Quick高级控件的使用
- Qt编程进阶(47):QML鼠标事件处理(qt编程难不难)
- 使用Xamarin和Visual Studio开发Android可穿戴设备应用
- Qt使用教程:创建Qt Quick应用程序(三)
- QML性能优化 | 常见界面元素优化(qml布局自适应大小)
- Qt使用教程:创建移动应用程序(二)
- Qt Quick 多媒体开发播放音乐和视频
- Qt使用教程:创建Qt Quick UI表单(三)
- 如何将 Qt 3D 渲染与 Qt Quick 2D 元素结合创建太阳系行星元素?
- QML控件:TextInput, TextField, TextEdit, TextArea用法及自定义
- 标签列表
-
- axure 注册码 (25)
- exploit db (21)
- mutex_lock (30)
- oracleclient (27)
- nfs (25)
- springbatch (28)
- oracle数据库备份 (25)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- c 数组 (33)
- pascal语言教程 (23)
- ppt 教程 (35)
- java7 (24)
- 自适应网站制作 (32)
- server服务自动停止 (25)
- 超链接去掉下划线 (34)
- 什么是堆栈 (22)
- map entry (25)
- ubuntu装qq (25)
- outputstreamwriter (26)
- fill_parent (22)