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 }); } }