Добавьте файлы проекта.
This commit is contained in:
116
README.MD
Normal file
116
README.MD
Normal file
@@ -0,0 +1,116 @@
|
||||
# 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‑боте
|
||||
|
||||
```csharp
|
||||
// Получение списка версий
|
||||
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 напрямую
|
||||
|
||||
```bash
|
||||
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` — ошибка перезапуска.
|
||||
|
||||
---
|
||||
|
||||
## 🛠 Пример сценария
|
||||
|
||||
1. Бот получает команду `/update latest`.
|
||||
2. ReleaseUpdater.dll:
|
||||
- Запрашивает список релизов через Gitea API.
|
||||
- Скачивает архив последней версии.
|
||||
- Вызывает событие `BeforeInstall`.
|
||||
- Запускает Updater.exe с параметрами.
|
||||
3. Updater.exe:
|
||||
- Распаковывает архив.
|
||||
- Перезапускает приложение.
|
||||
- Возвращает код `0`.
|
||||
4. ReleaseUpdater.dll вызывает событие `AfterInstall`.
|
||||
Reference in New Issue
Block a user