using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TrustedUninstaller.Shared.Tasks; using YamlDotNet.Serialization; namespace TrustedUninstaller.Shared.Actions { internal class UpdateAction : TaskAction, ITaskAction { public void RunTaskOnMainThread() { throw new NotImplementedException(); } [YamlMember(typeof(string), Alias = "name")] public string PackageName { get; set; } [YamlMember(typeof(string), Alias = "weight")] public int ProgressWeight { get; set; } = 1; public int GetProgressWeight() => ProgressWeight; private bool InProgress { get; set; } public void ResetProgress() => InProgress = false; public string ErrorString() => $"UpdateAction failed to remove update package {PackageName}."; public UninstallTaskStatus GetStatus() { if (InProgress) { return UninstallTaskStatus.InProgress; } return UninstallTaskStatus.Completed; } public async Task RunTask() { if (InProgress) { Console.WriteLine("An update action is already in progress..."); return false; } InProgress = true; Console.WriteLine($"Removing update package '{PackageName}'..."); CmdAction removeUpdate = new CmdAction() { Command = @$"DISM.exe /Online /Remove-Package /PackageName:{PackageName} /quiet /norestart" }; while(removeUpdate.GetStatus() != UninstallTaskStatus.Completed) { await removeUpdate.RunTask(); } InProgress = false; return true; } } }