Updater
📖 Описание
Updater — это инструмент для безопасного обновления приложений.
Он состоит из двух частей:
-
ReleaseUpdater.dll — библиотека для работы с API Gitea/GitHub:
- Получение списка доступных версий.
- Выбор нужной версии.
- Скачивание архива релиза.
- События жизненного цикла (
BeforeInstall,AfterInstall,UpdateFailed). - Запуск обновления либо напрямую (
UpdateInlineAsync), либо через внешний процесс (UpdateWithExternalAsync).
-
Updater.exe — консольное приложение:
- Принимает параметры (
--zip,--installPath,--appExe). - Распаковывает архив в папку установки.
- Перезапускает приложение.
- Работает как «чистый установщик», чтобы избежать проблем с блокировкой файлов.
- Принимает параметры (
🏗 Архитектура
Solution/
├─ ReleaseUpdater/ # Class Library (.dll)
│ ├─ ReleaseUpdaterFacade.cs
│ ├─ GiteaReleaseProvider.cs
│ ├─ HttpAssetDownloader.cs
│ ├─ SemVerService.cs
│ └─ Models.cs
│
├─ Updater/ # Console App (.exe)
│ ├─ Program.cs
│ ├─ Core/
│ │ ├─ IExtractor.cs / ZipExtractor.cs
│ │ ├─ IInstaller.cs / SafeFileInstaller.cs
│ │ ├─ IProcessManager.cs / ProcessManager.cs
│ │ ├─ UpdaterApp.cs
│ │ └─ Options.cs
│
└─ UpdaterSolution.sln
⚡ Возможности
- Получение списка версий из Gitea API.
- Обновление до последней или конкретной версии.
- Два режима обновления:
- Inline — всё внутри DLL.
- External — через Updater.exe.
- События:
BeforeInstall— перед установкой.AfterInstall— после успешной установки.UpdateFailed— при ошибке (автоматический запуск текущей версии).
- Безопасная установка: бэкап и откат при ошибке.
🚀 Использование
В Telegram‑боте
// Получение списка версий
var versions = await ReleaseUpdaterFacade.GetVersionsAsync(apiUrl, token);
// Обновление до последней версии
await ReleaseUpdaterFacade.UpdateInlineAsync(apiUrl, token, installPath, "MyBot.exe", "latest");
// Обновление через внешний Updater.exe
await ReleaseUpdaterFacade.UpdateWithExternalAsync(apiUrl, token, installPath, "MyBot.exe", "3.5.2");
Запуск Updater.exe напрямую
Updater.exe --zip "C:\Temp\update.zip" --installPath "C:\Apps\MyBot" --appExe "MyBot.exe"
🔧 Параметры Updater.exe
--zip <path>— путь к архиву .zip.--installPath <dir>— папка установки.--appExe <file.exe>— исполняемый файл приложения.--restartDelayMs <int>— задержка перед перезапуском (по умолчанию 500 мс).
📦 Коды возврата
0— успешное обновление.2— ошибка аргументов.3— ошибка распаковки.4— ошибка установки.5— ошибка перезапуска.
🛠 Пример сценария
- Бот получает команду
/update latest. - ReleaseUpdater.dll:
- Запрашивает список релизов через Gitea API.
- Скачивает архив последней версии.
- Вызывает событие
BeforeInstall. - Запускает Updater.exe с параметрами.
- Updater.exe:
- Распаковывает архив.
- Перезапускает приложение.
- Возвращает код
0.
- ReleaseUpdater.dll вызывает событие
AfterInstall.
Releases
12
ReleaseUpdater_v0.2.1
Latest
Languages
C#
100%