受够微信偷偷更新,我做了一个 Windows 微信更新屏蔽工具

最近微信更新了,增加了三栏布局,说实话真的很难用,于是我做了一个 Windows 微信更新屏蔽工具,已开源github

需求听起来特别简单:不要自动更新。

结果折腾下来才发现,这事真没那么容易。

最后我干脆写了个工具:wechat-update-blocker

一个专门给 Windows 微信 4.x / xwechat 用的更新屏蔽工具。代码已经开源,可以直接下 Release,也可以自己编译。

1. 痛点:我只是不想升级,怎么这么难?📌

一个软件不想让它自动更新,正常人的第一反应都是这几招:

  • 设置里关掉「自动更新」
  • 禁止更新程序运行
  • 把更新程序删掉
  • 禁用计划任务
  • 防火墙拦住联网

理论上总有一招管用。但微信 4.x / xwechat 的更新机制,比我想的复杂一点。

1.1 禁止一个更新 EXE,不等于禁止更新

我一开始的思路特别简单。

找到 WeixinUpdate.exe 这种更新程序,直接禁止它运行:

bash 复制代码
icacls "xxx\WeixinUpdate.exe" /deny Users:(RX)

看起来搞定了。结果用了一段时间发现,更新程序还是会冒出来。

问题在于,更新器不是一个固定不变的文件。xwechat 可以重新释放新的更新组件。

翻译一下就是:

复制代码
我:禁止 WeixinUpdate.exe 执行
微信:行,那我重新放一个。

只盯着一个 EXE,本质上就是打地鼠。

1.2 删除更新程序,也不彻底

那就直接删掉?问题还是一样。

只要上游还能往这两个地方写文件,今天删了,明天它照样生成:

sql 复制代码
XPlugin\Plugins\WeixinUpdate
xwechat\update

所以真正的问题不是「怎么删掉更新器」。而是「怎么阻止新的更新器被写进去」。

这个思路一转,后面就顺了。

1.3 只禁用计划任务,也不是完整方案

Windows 软件很爱用计划任务做后台更新,所以我自然也去翻了「任务计划程序」。

这招有用。但我不想让整个工具只押在某一种触发方式上。

因为更新机制会变。今天走计划任务,明天可能换个玩法。

所以我的思路变成了四个点一起处理:

复制代码
进程 → 更新程序 → 更新目录 → 计划任务

2. 换个思路:别拦「文件」,拦「更新路径」💡

我重新理了一遍微信更新的大致逻辑,简化后大概是这样:

markdown 复制代码
微信主程序
    │
    ▼
触发更新逻辑
    │
    ├──────────────┐
    ▼              ▼
计划任务       更新组件
                   │
                   ▼
          WeixinUpdate 目录
                   │
                   ▼
              update 目录
                   │
                   ▼
            替换 / 安装新版

如果只禁止 WeixinUpdate.exe,防护位置其实太靠后了。

所以我决定:把拦截点往前移。

不只禁止已有的更新程序执行,还把更新器依赖的目录一起锁住:

shell 复制代码
%APPDATA%\Tencent\xwechat\XPlugin\Plugins\WeixinUpdate
%APPDATA%\Tencent\xwechat\update

核心目的就一句话:阻止更新组件继续往这些位置写文件。

3. 我最后做了三层防护

3.1 第一层:结束正在运行的更新进程

如果更新器已经启动了,你再去改权限,很可能已经晚一步。

所以点「屏蔽更新」之后,第一步是处理掉当前正在跑的相关更新进程。

3.2 第二层:禁止已有更新 EXE 执行

对已经找到的微信更新程序,给普通 Users 用户组加上拒绝执行权限。

结果是:

复制代码
主程序还能正常用
更新器不能执行

注意,我没有直接删微信的文件。

3.3 第三层:锁住更新目录(最关键)

这是整个方案里我认为最重要的一层。

针对前面那两个目录设置 Windows ACL。而且权限会继承给后续创建的文件

也就是说,限制的不是「现在这个文件不能执行」,而是:

复制代码
写入 / 新建 / 删除 / 覆盖 / 执行

全给你挡在目录这一层。

这样即使微信以后想再释放一个新更新器,也会撞到目录权限上。

从:

复制代码
我知道你现在的更新器是谁,所以禁止你运行

变成:

复制代码
我不管你以后更新器叫什么,这条更新路径我直接锁了

稳定性就好很多了。

4. 三个设计取舍,我觉得比功能本身更有意思

工具能跑起来不难。难的是这几个「要不要这么做」的决定。

4.1 计划任务我禁用,但没删

很多屏蔽更新的脚本上来就是一句:

arduino 复制代码
schtasks /delete

我没这么干。

我的选择是禁用,而不是删除。原因很简单:我希望所有修改都是可以恢复的。

今天不想更新,不代表以后永远不更新。比如新版修了严重 Bug,或者某个功能必须新版才能用。再比如出了安全更新,我自己突然想升级。

这时候如果之前删得乱七八糟,还得重新研究一遍微信的更新机制。没必要。

所以这个工具一直遵守一条原则:

复制代码
屏蔽更新 ≠ 破坏更新机制

只是暂时关掉更新能力,需要的时候再完整打开。

4.2 「允许更新」不是摆设

既然改的是 ACL,那恢复功能也得认真做。

工具就两个状态:屏蔽更新允许更新

选「允许更新」之后,它会删掉自己加的拒绝 ACL,再按选项恢复计划任务。

整个逻辑更像一个开关:

markdown 复制代码
          ┌────────────┐
          │  微信更新   │
          └─────┬──────┘
                │
       ┌────────┴────────┐
       ▼                 ▼
   屏蔽更新           允许更新
       │                 │
       ▼                 ▼
   添加 ACL          移除 ACL
   禁用任务          恢复任务

而不是一次性的「删文件、删任务、删目录」。

4.3 状态不能靠软件自己记

小工具特别容易犯一个错。

程序内部写一个 blocked = true,下次打开就显示「当前已屏蔽」。

这其实不可靠。用户完全可能手动改权限、删目录、重装微信。也可能覆盖安装旧版本,或者用别的脚本改 ACL。

只信自己上次存的状态,那 UI 和真实系统迟早对不上。

所以这个工具不记「上一次点的是哪个按钮」。它每次都重新读 Windows ACL,按系统当前的实际权限来判断状态。

也就是:

复制代码
UI 状态 ← Windows 当前 ACL

而不是:

arduino 复制代码
UI 状态 ← config.json

对这类改系统配置的工具,我觉得这样才靠谱。

5. 为什么我用 AutoIt,而不是 Electron

做这个工具时我还有个要求:它必须足够小。

因为这软件干的事特别简单:

复制代码
检查微信 + 调用 Windows 命令 + 修改 ACL + 控制计划任务

就为这点功能上 Electron,得拖进来 node_modules、Chromium、Node.js Runtime,几十上百 MB。

多少有点:

为了拧一颗螺丝,开了一台挖掘机过来。

Tauri 确实轻很多,但这个项目连 WebView 都不是刚需。

最后我选了 AutoIt。它特别适合这种 Windows 小工具。GUI、系统命令、文件操作、Windows API,编译出来就是一个单文件 EXE。

项目里我甚至直接带了一份绿色版 AutoIt 工具链,放在 autoit-tool/。用的人不用额外装环境。

编译就一条命令:

css 复制代码
.\src\wechat-update-blocker\build.ps1

脚本自动跑一遍:

复制代码
Au3Check → 语法检查 → Aut2Exe → 生成 x64 EXE

产物:

sql 复制代码
dist\wechat-update-blocker.exe

对这种单功能 Windows 工具来说,这个方式反而很舒服。

怎么用:三步搞定

运行需要管理员权限,这个没法避免。因为 ACL 和计划任务本身就属于系统配置。

基本流程:

  1. 下载 Release,或者自己编译
  2. 以管理员身份运行 dist\wechat-update-blocker.exe
  3. 确认检测到的微信目录,不对就点「浏览...」手动选
  4. 选「屏蔽更新」,点确认

完事。

想停在某个旧版本? 那就先装好对应版本的微信,再打开屏蔽。

项目 issue 里推荐的是 v4.1.7 ,仓库在 Rodert/wechat-win-versions,Windows、macOS、Linux 的包都有。

顺序别反:先旧版回退,再屏蔽更新。

想升级了? 打开工具选「允许更新」,恢复权限,然后正常升级就行。

7. 边界和风险,我得说清楚

这个工具不会做的事

  • 不修改微信主程序
  • 不删聊天记录
  • 不改账号数据
  • 不破解微信,也不改微信的任何功能

它本质上只用了 Windows 自带的两样东西:ACL 文件权限,还有任务计划程序。而且所有操作都能恢复。

风险也要讲 🔥

屏蔽软件更新,意味着你可能拿不到安全补丁和 Bug 修复。

另外微信的更新机制未来完全可能改。所以我不会承诺「100% 永久有效」,只能跟着当前的更新机制持续调整。

如果哪天真遇到微信跑不起来、某些功能异常,或者必须升级才能用。最直接的办法就是打开工具,选「允许更新」。恢复权限以后再升级。

8. 写在最后

这个项目最开始只是我自己的一个小需求。

想法甚至只有一句话:微信,你先别更新。

结果从禁止一个 EXE,一路研究到更新目录。再到 ACL 继承、计划任务和状态恢复,最后干脆做成了一个独立小工具。

有时候这种工具反而挺有意思。

没有复杂架构,没有微服务,没有数据库,没有几十个 npm 包。核心逻辑就是几条 Windows 命令。

但它确实解决了一个每天都可能遇到的小痛点。

自动更新当然有它的好处。对大多数人来说,自动修 Bug、自动补安全漏洞、自动拿新功能,都挺合理。

但对开发者来说,版本稳定性有时候比「永远最新版」更重要。

旧插件兼容、旧 UI 使用习惯、自动化脚本兼容、企业环境兼容,都算。

我们真正需要的其实不是「永远不更新」,而是:

我决定什么时候更新。

这两件事差别很大。

拓展阅读

相关推荐
GPUStack1 小时前
GPUStack 部署实战:8 卡 H20 跑通 GLM-5.3-Flash,解锁 512K 长上下文与多模态
人工智能·开源·github
u1301301 小时前
GitHub 热榜项目:日榜(2026-09-13)
github
典典分享指南2 小时前
AI 配图的排版规范
macos·docker·github·vim·visual studio
程序员柒叔2 小时前
把可观测性数据送进 LLM 追踪平台
人工智能·llm·github·agent·可观测性·langfuse
u13013013 小时前
GitHub 热榜项目:周榜(2026-09-13)
github
dong_junshuai17 小时前
每天一个开源项目#99 OpenResearch:2.2K星的本地研究Agent工作台
开源·github·agent
峰向AI17 小时前
背单词太无聊?这个 23K Star 的工具让你边打字边背单词,两不耽误
github
OpenTiny社区18 小时前
码力全开,智启前端新生态|OpenTiny 登陆华为全联接大会2026
前端·github
m4Rk_19 小时前
【论文阅读】Agent 记忆机制(69):STITCH——用上下文意图解决“语义相关但情境错误”的记忆检索
论文阅读·人工智能·学习·开源·github