你好,我已经为 MacOS 安装了 WhatsApp 桌面版,它每天都会尝试提取 200|300mb 的更新,这很烦人,所以我需要阻止它。
已经尝试查看应用程序以找到要删除的单独的自动更新程序,但找不到它。
答案1
使用Handsoff
我发现的请求是什么并且它通过时*.fbcdn.net
很容易阻止它,但是本机不可能。
您需要先安装dnsmasq
如下内容:https://gist.github.com/ogrrd/5831371
在使用时的配置中$(brew --prefix)/etc/dnsmasq.conf
:
address=/.fbcdn.net/127.0.0.1
对于使用的解析器/etc/resolver/fbcdn.net
:
nameserver 127.0.0.1
运行scutil --dns
查看解析器。
运行sudo brew services start dnsmasq
启动dns服务器
通过以下方式测试:
ping test.fbcdn.net
PING test.fbcdn.net (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.053 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.349 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.444 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.084 ms
答案2
旧版 Whatsapp 桌面应用程序基于 Electron(一种将 Chrome 与 Web 技术相结合的框架,可以更轻松地提供感觉原生的 Web 应用程序)。
您可以更改应用程序文件或可执行文件的权限,以尝试中断自动更新。在 macOS 上,使用 Finder 的检查器,您可以“锁定”应用程序。
这会破坏自动更新,但您最终仍会面临不停的弹出窗口,要求您输入密码以允许更新。
很多 Electron 应用在后台使用 Squirrel 进行更新。你可以使用以下命令禁用 Squirrel:环境变量显然。
例如从终端启动 whatsapp 二进制文件,如下所示:
DISABLE_UPDATE_CHECK=1 /Applications/WhatsApp.app/Contents/MacOS/WhatsApp
确实,Squirrel 会弹出窗口要求您输入密码以允许安装更新助手。
...然而,在您禁用 Squirrel 后,您可能仍会面临“正在更新 whatsapp...”屏幕,并且该屏幕永远不会消失。
仔细研究后发现,Whatsapp 似乎在 dom 元素中使用过期时间戳来确定何时检查更新。我找不到任何可以轻松调整以禁用更新过程的 ENV。
您可以使用electron_inject
(一个 Python 项目)以便稍微调整应用程序的运行方式。
pip3 install electron_inject
特别是,您可以注入自定义脚本在 Electron 应用程序中运行,并附加 devtools 调试器来查明发生了什么。
例如,您可以将以下内容保存为whatsapp-inject.js
function initPostDom () {
var expiresEl = document.getElementById('hard_expire_time');
expiresEl.dataset.time = ""+(Date.now()/1000 + 24*60*60*7); // 7 days from now
}
document.addEventListener('DOMContentLoaded', initPostDom);
然后electron_inject
像这样运行 Whatsapp:
DISABLE_UPDATE_CHECK=1 python3 -m electron_inject -t 5 -r whatsapp-inject.js - /Applications/WhatsApp.app/Contents/MacOS/WhatsApp
假设您已更改文件系统权限以阻止自动更新,那么以这种方式运行 Whatsapp 将执行以下两件事:
- 禁用 Squirrel 更新程序,从而删除“输入密码进行安装”弹出窗口。
- 告诉 whatsapp 在接下来的 7 天内不要尝试更新。如果您在一周内不重新启动 whatsapp,您可能会看到一些更新内容。
在 Windows 上,应该是相同的,只需/Applications/WhatsApp.app/Contents/MacOS/WhatsApp
用你的 Whatsapp 的路径替换即可.exe
。
无法确定这会持续多久或您是否使用的是其他版本。已在 macos 版本上测试2.2349.51
。
由于特定原因,我正在运行不受支持的 macos (big sur),自动更新程序将我的应用程序替换为一个在 big sur 上甚至无法启动的应用程序。然后他们试图向所有人推广从头开始的应用程序。我试过了,但很讨厌它。新应用程序中有很多糟糕的用户体验和缺失的功能……所以我会尽可能地推迟。希望他们能在旧应用程序使用的 API 被终止之前修复新应用程序的用户体验和缺失的功能。
如果您想自己挖掘,您可以-b
在运行 electron_inject 时添加标志以进入 devtools。您可以尝试拦截注入脚本的响应等操作fetch
。看看killswitch
和check-update
调用。FWIW,拦截这些并覆盖响应似乎无助于禁用更新。
如果你想挖掘磁盘上的源代码,你可以执行以下操作来
npx @electron/asar extract /Applications/WhatsApp.app/Contents/Resources/app.asar /tmp/whatsapp-app-asar
答案3
经过几个小时的调整,我找到了一个完美的解决方案
从此处下载最新可用的“旧” WhatsApp 版本 2.2349.51https://whatsapp-desktop.en.uptodown.com/mac/versions
安装但不启动它
禁用 Squirrel 更新(WhatsApp 作为 atom 应用程序依赖于它)
/bin/launchctl setenv DISABLE_UPDATE_CHECK 1
- 提取源代码
npx @electron/asar extract /Applications/WhatsApp.app/Contents/Resources/app.asar ~/whatsapp-app-asar
- 修改~/whatsapp-app-asar/index.html这硬过期时间 数据时间纪元到 2099 年
<div id="hard_expire_time" data-time="4074711589"></div>
- 打包回源代码
npx @electron/asar pack whatsapp-app-asar app.asar
- 替换 app.asar/应用程序/WhatsApp.app/Contents/Resources使用我们新修改的