private void CleanCleanBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { var worker = (BackgroundWorker)sender; IsCleaningCache = true; OutputText = string.Empty; ErrorText = string.Empty; worker.ReportProgress(0); //使用CMD清理Winsxc等 //CacheCacheByCmd(worker); //删除文件 var toCleanFolders = SelectedItems.Select(I => I.ModuleFolder).ToList(); Application.Current.Dispatcher.Invoke(() => { ItemsSource.Clear(); }); CleanCacheUsingFileUtil(worker, toCleanFolders); //删除文件夹下所有的空文件夹 foreach (var folder in ToCleanUpManager.GetFolders()) { try { FolderUtil.DeleteEmptyFolder(folder, false); } catch (Exception exception) { LogHelper.Error(exception.Message); } } }
/// <summary> /// 时间较长,额外处理 /// </summary> private async void ExecuteDelayCommands() { var cleanDelayedCommands = ToCleanUpManager.GetCleanDelayedCommands(); foreach (var cleanDelayedCommand in cleanDelayedCommands) { await Task.Run(() => { ExecuteCmdHelper.ExecuteCmd(cleanDelayedCommand); }); OutputText += $"删除命令{cleanDelayedCommand}\r\n"; } }
/// <summary> /// 执行Cmd命令清理缓存 /// </summary> /// <param name="worker"></param> private void CacheCacheByCmd(BackgroundWorker worker) { worker.ReportProgress(0); var commands = ToCleanUpManager.GetCleanCacheCommands(); int index = 0; foreach (var command in commands) { index++; var currentOperationError = string.Empty; var currentOperationOutput = string.Empty; try { var currentOperationDetail = $"执行{command},可能需要几分钟,请等待"; worker.ReportProgress(-1, new ProgressChangedContent() { OperationDetail = currentOperationDetail, }); if (command.Contains(@"C:\Windows\Installer\$PatchCache$")) { ExecuteCmdHelper.ExecuteCmd("Net Start msiserver /Y"); ExecuteCmdHelper.ExecuteCmd("Net Stop msiserver /Y"); ExecuteCmdHelper.ExecuteCmd(@"Reg Add HKLM\Software\Policies\Microsoft\Windows\Installer /v MaxPatchCacheSize /t REG_DWORD /d 0 /f"); ExecuteCmdHelper.ExecuteCmd(command); ExecuteCmdHelper.ExecuteCmd("Net Start msiserver /Y"); ExecuteCmdHelper.ExecuteCmd("Net Stop msiserver /Y"); ExecuteCmdHelper.ExecuteCmd(@"Reg Add HKLM\Software\Policies\Microsoft\Windows\Installer /v MaxPatchCacheSize /t REG_DWORD /d 10 /f"); ExecuteCmdHelper.ExecuteCmd("Net Start msiserver /Y"); } var executeCmdResult = ExecuteCmdHelper.ExecuteCmd(command); currentOperationOutput += $"命令{command}"; } catch (Exception e) { LogHelper.Error(e.Message); currentOperationError = $"{command}执行失败"; } finally { worker.ReportProgress(Convert.ToInt32(Convert.ToDouble(index) / Convert.ToDouble(commands.Count)), new ProgressChangedContent() { OperationOutput = currentOperationOutput, OperationError = currentOperationError }); } } }