public static void ClearRegistry(string keyPath) { RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(keyPath, true); if (registryKey == null) { return; } if (registryKey.Name.EndsWith("\\MARK_INVALID")) { string[] valueNames = registryKey.GetValueNames(); for (int i = 0; i < (int)valueNames.Length; i++) { registryKey.DeleteValue(valueNames[i]); } } string[] subKeyNames = registryKey.GetSubKeyNames(); for (int j = 0; j < (int)subKeyNames.Length; j++) { string str = subKeyNames[j]; BackgroundFilePatcher.ClearRegistry(string.Concat(keyPath, "\\", str)); } }
private void bgwWorker_DoWork(object sender, DoWorkEventArgs e) { Process exeProcess; this._fileList.Clear(); this._fileList.AddRange( from p in GlobalData.PresetsManager select new PatchInfo(p)); if (this._fileList.Count == 0) { return; } this.ReportProgress(BackgroundFilePatcher.States.PreparingFilesStarted, 0); for (int i = 0; i < this._fileList.Count; i++) { if (this._bgwWorker.CancellationPending) { e.Cancel = true; return; } PatchInfo item = this._fileList[i]; if (!FileEx.Equals(item.ModdedFile, item.TempFile)) { File.Copy(item.ModdedFile, item.TempFile, true); } this.ReportProgress(BackgroundFilePatcher.States.PreparingFiles, BackgroundFilePatcher.CalculateProgress(i, this._fileList.Count)); } BackgroundFilePatcher.BlockLogs(); if (!Settings.Default.SkipLauncher || string.IsNullOrWhiteSpace(Settings.Default.X2Args)) { BackgroundFilePatcher.RunLauncher(); this.ReportProgress(BackgroundFilePatcher.States.WaitingForX2ToOpen, 0); while (!this._bgwWorker.CancellationPending) { exeProcess = ProcessEx.GetExeProcess(Paths.Elsword.ClientExe); Thread.Sleep(1000); if (exeProcess != null) { this.ReportProgress(BackgroundFilePatcher.States.BackupStarted, 0); this.CreateBackup(); this.ReportProgress(BackgroundFilePatcher.States.PatchingStarted, 0); this.PatchFiles(); (new DirectoryInfo(Paths.Main.Cache)).Empty(); this.ReportProgress(BackgroundFilePatcher.States.WaitingForX2ToClose, 100); exeProcess.WaitForExit(); this.ReportProgress(BackgroundFilePatcher.States.RestoringBackupStarted, 0); this.RestoreBackup(); BackgroundFilePatcher.ClearRegistry("Software\\ElswordINT"); BackgroundFilePatcher.ClearRegistry("Software\\Nexon\\Elsword\\PatcherOption"); this.ReportProgress(BackgroundFilePatcher.States.Done, 100); return; } } e.Cancel = true; return; } else { exeProcess = Paths.Elsword.RunClient(); } this.ReportProgress(BackgroundFilePatcher.States.BackupStarted, 0); this.CreateBackup(); this.ReportProgress(BackgroundFilePatcher.States.PatchingStarted, 0); this.PatchFiles(); (new DirectoryInfo(Paths.Main.Cache)).Empty(); this.ReportProgress(BackgroundFilePatcher.States.WaitingForX2ToClose, 100); exeProcess.WaitForExit(); this.ReportProgress(BackgroundFilePatcher.States.RestoringBackupStarted, 0); this.RestoreBackup(); BackgroundFilePatcher.ClearRegistry("Software\\ElswordINT"); BackgroundFilePatcher.ClearRegistry("Software\\Nexon\\Elsword\\PatcherOption"); this.ReportProgress(BackgroundFilePatcher.States.Done, 100); }