private void RestoreCurrentVersionFromBackup() { try { if (Directory.Exists(_restartAppCurrenPathBackup)) { foreach (var file in FilesWorks.GetFiles(_restartAppCurrenPathBackup, _searchPatterns, SearchOption.TopDirectoryOnly)) { try { file.CopyTo(Path.Combine(_restartAppCurrenPath, file.Name)); } catch (Exception ex) { AppendLogMessage($"Не критическая ошибка копирования файла из бекапа. Original: {ex.Message}"); } } } else { AppendLogMessage($"Ошибка восстановления текущей версии из бекапа. Бекапа не существует."); } AppendLogMessage($"Восстановление ткущей версии из бекапа выполнено."); } catch (Exception ex) { AppendLogMessage($"Ошибка восстановления текущей версии из бекапа. Original: {ex.Message}"); } }
private static void RestoreCurrentVersionFromBackup() { try { if (Directory.Exists(_currentVersionBackupPath)) { foreach (var file in FilesWorks.GetFiles(_currentVersionBackupPath, _searchPatterns, SearchOption.TopDirectoryOnly)) { try { file.CopyTo(Path.Combine(_currentVersionPath, file.Name)); } catch (Exception ex) { NLogger.LogErrorToHdd($"Не критическая ошибка копирования файла из бекапа. Original: {ex.Message}", MainSettings.Constants.MAGIC_UPDATER_RESTART); } } } else { NLogger.LogErrorToHdd($"Ошибка восстановления текущей версии из бекапа. Бекапа не существует.", MainSettings.Constants.MAGIC_UPDATER_RESTART); } NLogger.LogDebugToHdd($"Восстановление ткущей версии из бекапа выполнено.", MainSettings.Constants.MAGIC_UPDATER_RESTART); } catch (Exception ex) { NLogger.LogErrorToHdd($"Ошибка восстановления текущей версии из бекапа. Original: {ex.Message}", MainSettings.Constants.MAGIC_UPDATER_RESTART); } }
private static void CopyNewVersionFiles() { //Мутим Backup try { FilesWorks.DeleteDirectoryFull(_currentVersionBackupPath); Directory.CreateDirectory(_currentVersionBackupPath); if (Directory.Exists(_currentVersionBackupPath)) { foreach (var file in FilesWorks.GetFiles(_currentVersionPath, _searchPatterns, SearchOption.TopDirectoryOnly)) { file.CopyTo(Path.Combine(_currentVersionBackupPath, file.Name), true); } } } catch (Exception ex) { NLogger.LogErrorToHdd($"Ошибка создания бекапа текущей версии {MainSettings.Constants.MAGIC_UPDATER}. Original: {ex.Message}", MainSettings.Constants.MAGIC_UPDATER_RESTART); return; } //Удаляем текущую версию try { foreach (var file in FilesWorks.GetFiles(_currentVersionPath, _searchPatterns, SearchOption.TopDirectoryOnly)) { if (file.Name != "settings.json") { file.Delete(); } } } catch (Exception ex) { NLogger.LogErrorToHdd($"Ошибка удаления текущей версии. Original: {ex.Message}", MainSettings.Constants.MAGIC_UPDATER_RESTART); RestoreCurrentVersionFromBackup(); return; } //Копируем новую версию try { foreach (var file in FilesWorks.GetFiles(_newVersionPath, _searchPatterns, SearchOption.TopDirectoryOnly)) { file.CopyTo(Path.Combine(_currentVersionPath, file.Name)); } } catch (Exception ex) { NLogger.LogErrorToHdd($"Ошибка копирования новой версии в попку текущей. Original: {ex.Message}", MainSettings.Constants.MAGIC_UPDATER_RESTART); RestoreCurrentVersionFromBackup(); return; } }
private bool UpdateMyself() { //Убиваем все процессы MagicUpdaterRestart Tools.KillAllProcessByname(MainSettings.Constants.MAGIC_UPDATER_RESTART, true); #region Initialization _restartAppCurrentExePath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), MainSettings.Constants.RESTART_SERVICE_APPLICATION_FOLDER, MainSettings.Constants.RESTART_SERVICE_APPLICATION_EXE_NAME); _restartAppUpdateExePath = Path.Combine(MainSettings.LocalSqlSettings.SelfUpdatePath, MainSettings.Constants.RESTART_SERVICE_APPLICATION_FOLDER, MainSettings.Constants.RESTART_SERVICE_APPLICATION_EXE_NAME); _restartAppUpdatePath = Path.Combine(MainSettings.LocalSqlSettings.SelfUpdatePath, MainSettings.Constants.RESTART_SERVICE_APPLICATION_FOLDER); _restartAppCurrenPath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), MainSettings.Constants.RESTART_SERVICE_APPLICATION_FOLDER); _restartAppCurrenPathBackup = Path.Combine(_restartAppCurrenPath, "backup"); _searchPatterns = new string[] { "*.exe", "*.dll", "*.xml", "*.config", "*.pdb", "*.manifest", }; if (!File.Exists(_restartAppCurrentExePath)) { _restartAppCurrentExeVersion = new Version(0, 0, 0, 0); } else { _restartAppCurrentExeVersion = new Version(FileVersionInfo.GetVersionInfo(_restartAppCurrentExePath).FileVersion); } if (!File.Exists(_restartAppUpdateExePath)) { AppendLogMessage($"Отсутствует файл по пути \"{_restartAppUpdateExePath}\""); return(false); } _restartAppUpdateExeVersion = new Version(FileVersionInfo.GetVersionInfo(_restartAppUpdateExePath).FileVersion); #endregion Initialization #region RestartApplicationUpdate if (!CompareFileVersion(_restartAppCurrentExeVersion, _restartAppUpdateExeVersion)) { //Мутим Backup try { FilesWorks.DeleteDirectoryFull(_restartAppCurrenPathBackup); Directory.CreateDirectory(_restartAppCurrenPathBackup); if (Directory.Exists(_restartAppCurrenPathBackup)) { foreach (var file in FilesWorks.GetFiles(_restartAppCurrenPath, _searchPatterns, SearchOption.TopDirectoryOnly)) { file.CopyTo(Path.Combine(_restartAppCurrenPathBackup, file.Name)); } } } catch (Exception ex) { AppendLogMessage($"Ошибка создания бекапа текущей версии {MainSettings.Constants.MAGIC_UPDATER_RESTART}. Original: {ex.Message}"); return(false); } //Удаляем текущую версию try { foreach (var file in FilesWorks.GetFiles(_restartAppCurrenPath, _searchPatterns, SearchOption.TopDirectoryOnly)) { file.Delete(); } } catch (Exception ex) { AppendLogMessage($"Ошибка удаления текущей версии. Original: {ex.Message}. Выполняется восстановление из бекапа"); RestoreCurrentVersionFromBackup(); return(false); } //Копируем новую версию try { Directory.CreateDirectory(_restartAppCurrenPath); foreach (var file in FilesWorks.GetFiles(_restartAppUpdatePath, _searchPatterns, SearchOption.TopDirectoryOnly)) { file.CopyTo(Path.Combine(_restartAppCurrenPath, file.Name)); } } catch (Exception ex) { AppendLogMessage($"Ошибка копирования новой версии в попку текущей. Original: {ex.Message}. Выполняется восстановление из бекапа"); RestoreCurrentVersionFromBackup(); return(false); } } #endregion RestartApplicationUpdate IsSendLogAndStatusAfterExecution = false; Tools.SelfUpdateAndRestart(Id); return(true); }