diff --git a/ReleaseUpdater/ReleaseUpdaterFacade.cs b/ReleaseUpdater/ReleaseUpdaterFacade.cs index bedfe27..1736d7a 100644 --- a/ReleaseUpdater/ReleaseUpdaterFacade.cs +++ b/ReleaseUpdater/ReleaseUpdaterFacade.cs @@ -72,7 +72,7 @@ public static class ReleaseUpdaterFacade /// Обновление через внешний Updater.exe. /// public static async Task UpdateWithExternalAsync( - string apiUrl, string? token, string installPath, string appExe, string versionOrLatest = "latest", string? updaterExePath = null, bool exitCurrentApp = false) + string apiUrl, string? token, string installPath, string appExe, string versionOrLatest = "latest", string? updaterExePath = null, bool exitCurrentApp = false, string? tempUpdaterDirectory = null) { try { @@ -83,13 +83,31 @@ public static class ReleaseUpdaterFacade var asset = release.Assets.FirstOrDefault(a => a.Name.EndsWith(".zip")) ?? throw new Exception("No zip asset found"); + string tempNumber = $"{Guid.NewGuid():N}"; + var tempUpdaterName = $"updater_{tempNumber}.exe"; + + if (updaterExePath == null) updaterExePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Updater.exe"); + + if (string.IsNullOrWhiteSpace(tempUpdaterDirectory)) + { + tempUpdaterDirectory = Path.GetDirectoryName(updaterExePath); + tempUpdaterDirectory = Path.Combine(tempUpdaterDirectory!, "tempUpdater"); + } + + if (!Directory.Exists(tempUpdaterDirectory)) + { + Directory.CreateDirectory(tempUpdaterDirectory); + } + + var tempUpdaterPath = Path.Combine(tempUpdaterDirectory, tempUpdaterName!); + + var downloader = new HttpAssetDownloader(); - var zipPath = await downloader.DownloadAssetAsync(asset.DownloadUrl, token); + var zipPath = await downloader.DownloadAssetAsync(asset.DownloadUrl, token, Path.Combine(tempUpdaterDirectory, $"updater_{tempNumber}.zip")); BeforeInstall?.Invoke(); - - if (updaterExePath == null) updaterExePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Updater.exe"); + File.Copy(updaterExePath, tempUpdaterPath); if (installPath.EndsWith("\\")) { @@ -113,7 +131,7 @@ public static class ReleaseUpdaterFacade var process = Process.Start(new ProcessStartInfo { - FileName = updaterExePath, + FileName = tempUpdaterPath, Arguments = args, UseShellExecute = true, WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory