如何阻止 Whatsapp 桌面自动更新

如何阻止 Whatsapp 桌面自动更新

你好,我已经为 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。看看killswitchcheck-update调用。FWIW,拦截这些并覆盖响应似乎无助于禁用更新。

如果你想挖掘磁盘上的源代码,你可以执行以下操作来

npx @electron/asar extract /Applications/WhatsApp.app/Contents/Resources/app.asar /tmp/whatsapp-app-asar

答案3

经过几个小时的调整,我找到了一个完美的解决方案

  1. 从此处下载最新可用的“旧” WhatsApp 版本 2.2349.51https://whatsapp-desktop.en.uptodown.com/mac/versions

  2. 安装但不启动它

  3. 禁用 Squirrel 更新(WhatsApp 作为 atom 应用程序依赖于它)

/bin/launchctl setenv DISABLE_UPDATE_CHECK 1

  1. 提取源代码

npx @electron/asar extract /Applications/WhatsApp.app/Contents/Resources/app.asar ~/whatsapp-app-asar

  1. 修改~/whatsapp-app-asar/index.html硬过期时间 数据时间纪元到 2099 年

<div id="hard_expire_time" data-time="4074711589"></div>

  1. 打包回源代码

npx @electron/asar pack whatsapp-app-asar app.asar

  1. 替换 app.asar/应用程序/WhatsApp.app/Contents/Resources使用我们新修改的

相关内容