Добавьте файлы проекта.

This commit is contained in:
2025-11-25 07:39:25 +03:00
parent ed6a7e1938
commit 5bbcfb1e76
21 changed files with 793 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
namespace Updater.Core;
/// <summary>
/// Управляет потоком обновлений: извлечение, установка, перезапуск.
/// </summary>
public sealed class UpdaterApp
{
private readonly ILogger _log;
private readonly IExtractor _extractor;
private readonly IInstaller _installer;
private readonly IProcessManager _proc;
public UpdaterApp(ILogger log, IExtractor extractor, IInstaller installer, IProcessManager proc)
{
_log = log;
_extractor = extractor;
_installer = installer;
_proc = proc;
}
/// <summary>Запускает рабочий процесс обновления.</summary>
public int Run(Options opts)
{
var tempExtractDir = Path.Combine(Path.GetTempPath(), $"upd_extract_{Guid.NewGuid():N}");
Directory.CreateDirectory(tempExtractDir);
try
{
_extractor.Extract(opts.ZipPath, tempExtractDir);
}
catch (Exception ex)
{
_log.Error($"Extraction failed: {ex.Message}");
Cleanup(tempExtractDir);
return ExitCodes.ExtractFailed;
}
try
{
_installer.Install(tempExtractDir, opts.InstallPath);
}
catch (Exception ex)
{
_log.Error($"Install failed: {ex.Message}");
Cleanup(tempExtractDir);
return ExitCodes.InstallFailed;
}
Cleanup(tempExtractDir);
try
{
_proc.StartApp(opts.InstallPath, opts.AppExe, opts.RestartDelayMs);
return ExitCodes.Ok;
}
catch (Exception ex)
{
_log.Error($"Restart failed: {ex.Message}");
return ExitCodes.RestartFailed;
}
}
private static void Cleanup(string dir)
{
try { Directory.Delete(dir, true); } catch { /* ignore */ }
}
}