diff --git a/src/Nullinside.Api.Common/Desktop/GitHubUpdateManager.cs b/src/Nullinside.Api.Common/Desktop/GitHubUpdateManager.cs index 4fd3f91..5f3c229 100644 --- a/src/Nullinside.Api.Common/Desktop/GitHubUpdateManager.cs +++ b/src/Nullinside.Api.Common/Desktop/GitHubUpdateManager.cs @@ -48,7 +48,7 @@ public static async Task PrepareUpdate() { // To prepare the update, we just need to back up our files string ourFolder = Path.GetDirectoryName(typeof(GitHubUpdateManager).Assembly.Location) ?? ""; string backupFolder = Path.Combine(ourFolder, "..", "backup"); - await DeleteRetry(backupFolder); + await DeleteFolderRetry(backupFolder); Directory.CreateDirectory(backupFolder); FileSystem.CopyDirectory(ourFolder, backupFolder); @@ -78,7 +78,7 @@ public static void ExitApplicationToUpdate() { /// public static async Task PerformUpdateAndRestart(string owner, string repo, string installFolder, string assetName) { // Delete the old install folder. - await DeleteRetry(installFolder); + await DeleteFolderContentsRetry(installFolder); // Get the latest version of the application from GitHub. string ourFolder = Path.GetDirectoryName(typeof(GitHubUpdateManager).Assembly.Location) ?? ""; @@ -96,7 +96,7 @@ public static async Task PerformUpdateAndRestart(string owner, string repo, stri // Run the new version of the application. Process.Start(Path.Combine(installFolder, $"{AppDomain.CurrentDomain.FriendlyName}.exe"), "--justUpdated"); - + // Close this version of the application. Environment.Exit(0); } @@ -108,15 +108,15 @@ public static async Task CleanupUpdate() { string ourFolder = Path.GetDirectoryName(typeof(GitHubUpdateManager).Assembly.Location) ?? ""; string backupFolder = Path.Combine(ourFolder, "..", "backup"); - await DeleteRetry(backupFolder); + await DeleteFolderRetry(backupFolder); } /// - /// Retries deleting a folder multiple times. + /// Retries deleting a folder multiple times. /// /// The folder to delete. - private static async Task DeleteRetry(string folder) { - await Retry.Execute(() => { + private static async Task DeleteFolderRetry(string folder) { + await Retry.Execute(() => { if (Directory.Exists(folder)) { Directory.Delete(folder, true); } @@ -124,4 +124,22 @@ await Retry.Execute(() => { return Task.FromResult(true); }, 30, waitTime: TimeSpan.FromSeconds(1)); } + + /// + /// Retries deleting the contents of a folder multiple times. + /// + /// The folder to delete the contents of. + private static async Task DeleteFolderContentsRetry(string folder) { + await Retry.Execute(() => { + if (!Directory.Exists(folder)) { + return Task.FromResult(true); + } + + foreach (string file in Directory.GetFiles(folder)) { + File.Delete(file); + } + + return Task.FromResult(true); + }, 30, waitTime: TimeSpan.FromSeconds(1)); + } } \ No newline at end of file