void bw_DoWorkRegistry(object sender, DoWorkEventArgs e) { List <RegChange> rollbackRegistry = new List <RegChange>(); //parse variables in the regChanges for (int i = 0; i < UpdtDetails.RegistryModifications.Count; i++) { UpdtDetails.RegistryModifications[i] = ParseRegChange(UpdtDetails.RegistryModifications[i]); } Exception except = null; try { UpdateRegistry(rollbackRegistry); } catch (Exception ex) { except = ex; } RollbackUpdate.WriteRollbackRegistry(Path.Combine(TempDirectory, "backup\\regList.bak"), rollbackRegistry); if (IsCancelled() || except != null) { // rollback the registry bw.ReportProgress(1, true); RollbackUpdate.RollbackRegistry(TempDirectory); // rollback files bw.ReportProgress(1, false); RollbackUpdate.RollbackFiles(TempDirectory, ProgramDirectory); // rollback unregged COM RollbackUpdate.RollbackUnregedCOM(TempDirectory); // rollback stopped services RollbackUpdate.RollbackStoppedServices(TempDirectory); bw.ReportProgress(0, new object[] { -1, -1, string.Empty, ProgressStatus.Failure, except }); } else { // registry modification completed sucessfully bw.ReportProgress(0, new object[] { -1, -1, string.Empty, ProgressStatus.Success, null }); } }
void bw_DoWorkUpdateFiles(object sender, DoWorkEventArgs e) { //check if folders exist, and count files to be moved string backupFolder = Path.Combine(TempDirectory, "backup"); string[] backupFolders = new string[13]; //Note: InstallShortcuts() requires the position in array to remain constant string[] origFolders = { "base", "system", "64system", "root", "appdata", "lappdata", "comappdata", "comdesktop", "comstartmenu", "cp86", "cp64", "curdesk", "curstart" }; string[] destFolders = { ProgramDirectory, SystemFolders.GetSystem32x86(), SystemFolders.GetSystem32x64(), SystemFolders.GetRootDrive(), SystemFolders.GetCurrentUserAppData(), SystemFolders.GetCurrentUserLocalAppData(), SystemFolders.GetCommonAppData(), SystemFolders.GetCommonDesktop(), SystemFolders.GetCommonProgramsStartMenu(), SystemFolders.GetCommonProgramFilesx86(), SystemFolders.GetCommonProgramFilesx64(), SystemFolders.GetCurrentUserDesktop(), SystemFolders.GetCurrentUserProgramsStartMenu() }; List <FileFolder> rollbackList = new List <FileFolder>(); int totalDone = 0; Exception except = null; try { int totalFiles = 0; // count the files and create backup folders for (int i = 0; i < origFolders.Length; i++) { // does orig folder exist? if (!Directory.Exists(Path.Combine(TempDirectory, origFolders[i]))) { continue; } //orig folder exists, set backup & orig folder locations backupFolders[i] = Path.Combine(backupFolder, origFolders[i]); origFolders[i] = Path.Combine(TempDirectory, origFolders[i]); Directory.CreateDirectory(backupFolders[i]); // delete "newer" client, if it will overwrite this client DeleteClientInPath(destFolders[i], origFolders[i]); // count the total files totalFiles += new DirectoryInfo(origFolders[i]).GetFiles("*", SearchOption.AllDirectories).Length; } //run the backup & replace for (int i = 0; i < origFolders.Length; i++) { if (IsCancelled()) { break; } if (backupFolders[i] != null) //if the backup folder exists { UpdateFiles(origFolders[i], destFolders[i], backupFolders[i], rollbackList, ref totalDone, ref totalFiles); } } DeleteFiles(backupFolder, rollbackList); InstallShortcuts(destFolders, backupFolder, rollbackList); } catch (Exception ex) { except = ex; } // write the list of newly created files and folders RollbackUpdate.WriteRollbackFiles(Path.Combine(backupFolder, "fileList.bak"), rollbackList); if (IsCancelled() || except != null) { // rollback files bw.ReportProgress(1, false); RollbackUpdate.RollbackFiles(TempDirectory, ProgramDirectory); // rollback unregged COM RollbackUpdate.RollbackUnregedCOM(TempDirectory); // rollback stopped services RollbackUpdate.RollbackStoppedServices(TempDirectory); bw.ReportProgress(0, new object[] { -1, -1, string.Empty, ProgressStatus.Failure, except }); } else { // backup & replace was successful bw.ReportProgress(0, new object[] { -1, -1, string.Empty, ProgressStatus.Success, null }); } }