Добавьте файлы проекта.
This commit is contained in:
67
Updater/Core/UpdaterApp.cs
Normal file
67
Updater/Core/UpdaterApp.cs
Normal 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 */ }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user