Как остановить автоматическое обновление WhatsApp на компьютере

Вопрос или проблема

Привет, я установил WhatsApp Desktop для MacOS, и он пытается загружать обновления по 200|300 МБ каждый день, что раздражает, поэтому мне нужно остановить это.

Я уже пытался найти в приложении отдельный автообновлятор, чтобы его удалить, но не смог найти.

Используя 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

Старое приложение WhatsApp для настольных ПК основано на Electron (фреймворке, который сочетает Chrome с веб-технологиями для более легкой доставки веб-приложений, которые выглядят нативными).

Вы можете изменить разрешения на файле приложения или исполняемом файле, чтобы попытаться отключить автообновление. На macOS, используя инспектор Finder, вы можете “заблокировать” приложение.

Это может отключить автообновления, но в конечном итоге вы все равно столкнетесь с постоянными всплывающими окнами, требующими ввести ваш пароль для разрешения обновления.

Под капотом многие приложения на Electron используют Squirrel для обновлений. Вы можете отключить Squirrel с помощью переменной окружения.

Например, запуская бинарный файл WhatsApp из терминала с чем-то вроде:

DISABLE_UPDATE_CHECK=1 /Applications/WhatsApp.app/Contents/MacOS/WhatsApp

Действительно, всплывающие окна Squirrel для ввода пароля для установки помощника обновления исчезают.

…тем не менее, вы все равно можете столкнуться с экраном “Обновление WhatsApp…”, который никогда не исчезает после отключения Squirrel.

Изучая это, похоже, что WhatsApp использует отметку времени истечения в DOM-элементе, чтобы определить, когда ему следует проверять обновления. Я не смог найти никакую переменную окружения, которую я мог бы легко изменить, чтобы отключить процесс обновления.

Вы можете использовать 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 дней с этого момента 
}

document.addEventListener('DOMContentLoaded', initPostDom);

А затем запустить WhatsApp, используя electron_inject следующим образом:

DISABLE_UPDATE_CHECK=1 python3 -m electron_inject -t 5 -r whatsapp-inject.js -  /Applications/WhatsApp.app/Contents/MacOS/WhatsApp

При условии, что вы изменили разрешения файловой системы для блокировки автообновления, запуск WhatsApp таким образом выполняет следующие 2 действия:

  • отключает обновление Squirrel, что устраняет всплывающие окна “введите пароль для установки”.
  • говорит WhatsApp не пытаться обновляться в течение следующих 7 дней. Если вы не перезапустите WhatsApp в течение недели, вы можете увидеть некоторые обновления.

На Windows должно быть то же самое, просто замените /Applications/WhatsApp.app/Contents/MacOS/WhatsApp на путь к вашему WhatsApp .exe.

Неизвестно, как долго это будет работать или если вы находитесь на другой версии. Проверено на версии macOS 2.2349.51.

Я использую неподдерживаемую macOS (Big Sur) по конкретным причинам, и автообновлятор заменил мое приложение на то, которое даже не запускается на Big Sur. Кроме того, есть переписанное приложение, на которое они пытаются заставить всех перейти. Я пробовал его и он мне не понравился. У нового приложения много ужасного UX и отсутствуют функции… поэтому я откладываю переход на него как можно дольше. Надеюсь, они исправят потрясающий UX нового приложения и добавят отсутствующие функции, прежде чем APIs, с которыми работает старое приложение, будут отключены.

Если вы хотите исследовать сами, вы можете получить доступ к devtools, добавив флаг -b при запуске electron_inject. Вы можете поиграть с такими вещами, как перехват ответов fetch из вашего внедренного скрипта. Обратите внимание на вызовы killswitch и check-update. Для вашего сведения, перехват этих вызовов и переопределение ответов, похоже, не помогло отключить обновления.

Если вы хотите исследовать источники на диске, вы можете сделать следующее:

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

После нескольких часов настройки я нашел идеальное рабочее решение

  1. Скачайте последнюю рабочую “старую” версию WhatsApp 2.2349.51 оттуда https://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 hard_expire_time data-time последовательность на год 2099

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

  1. Упакуйте обратно исходный код

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

  1. Замените app.asar в /Applications/WhatsApp.app/Contents/Resources на нашу новую изменённую

Ответ или решение

Чтобы остановить автоматическое обновление WhatsApp Desktop на MacOS, вы можете предпринять следующие шаги. Пожалуйста, следуйте инструкциям внимательно:

1. Загрузка старой версии WhatsApp

Сначала вам нужно скачать последнюю рабочую версию старого WhatsApp (например, 2.2349.51). Вы можете найти ее здесь: Старые версии WhatsApp.

2. Установка приложения

Установите скачанное приложение, но не запускайте его сразу.

3. Отключение обновлений Squirrel

WhatsApp использует Squirrel для автоматических обновлений, поэтому сначала необходимо отключить проверки обновлений. Откройте терминал и выполните следующую команду:

/bin/launchctl setenv DISABLE_UPDATE_CHECK 1

4. Извлечение исходного кода

Теперь извлеките исходный код приложения с помощью команды:

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

5. Модификация времени истечения

Перейдите в директорию извлеченного приложения:

cd ~/whatsapp-app-asar

Откройте файл index.html в текстовом редакторе и измените элемент hard_expire_time. Установите data-time в значение, представляющее 2099 год, например:

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

6. Упаковка исходного кода обратно

После внесения изменений, упакуйте исходный код обратно:

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

7. Замена испорченного файла приложения

Затем замените модифицированный файл app.asar в папке:

/Applications/WhatsApp.app/Contents/Resources

Для этого может потребоваться увеличить права доступа. Вы можете воспользоваться sudo для выполнения команды копирования.

Дополнительно: Блокировка обновлений через DNS

Хотя это не обязательно, вы можете дополнительно заблокировать домен, через который WhatsApp проверяет обновления. Для этого вам понадобится dnsmasq.

Установите dnsmasq, если он у вас еще не установлен:

brew install dnsmasq

Добавьте следующую строку в конфигурационный файл dnsmasq:

address=/.fbcdn.net/127.0.0.1

Создайте файл-резолвер:

echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/fbcdn.net

Запустите dnsmasq:

sudo brew services start dnsmasq

Проверьте, работает ли правильно:

ping test.fbcdn.net

Заключение

После выполнения всех описанных шагов, автоматические обновления WhatsApp Desktop должны быть отключены. Учтите, что разработчики могут изменить работу приложения в будущем, поэтому описанные методы могут стать неактуальными.

Оцените материал
Добавить комментарий

Капча загружается...