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}"); } }
protected override void ActExecution() { string restartFolderPath = Path.Combine(MainSettings.LocalSqlSettings.SelfUpdatePath, MainSettings.Constants.MU_RESTART_FOLDER_NAME); FilesWorks.ClearDirectory(MainSettings.LocalSqlSettings.SelfUpdatePath); Directory.CreateDirectory(MainSettings.LocalSqlSettings.SelfUpdatePath); Directory.CreateDirectory(restartFolderPath); var resRestart = FtpWorks.DownloadFilesFromFtpFolder(MainSettings.LocalSqlSettings.SelfUpdateFtpServer , MainSettings.LocalSqlSettings.SelfUpdateFtpUser , MainSettings.LocalSqlSettings.SelfUpdateFtpPassword , Path.Combine(MainSettings.LocalSqlSettings.SelfUpdateFtpPath, MainSettings.Constants.MU_RESTART_FOLDER_NAME) , restartFolderPath , "*"); if (!resRestart.IsComplete) { throw new Exception($"Restart part: {resRestart.Message}"); } var resAgent = FtpWorks.DownloadFilesFromFtpFolder(MainSettings.LocalSqlSettings.SelfUpdateFtpServer , MainSettings.LocalSqlSettings.SelfUpdateFtpUser , MainSettings.LocalSqlSettings.SelfUpdateFtpPassword , MainSettings.LocalSqlSettings.SelfUpdateFtpPath , MainSettings.LocalSqlSettings.SelfUpdatePath , "*"); if (!resAgent.IsComplete) { throw new Exception($"Agent part: {resAgent.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; } }
public void Uninstall() { try { UninstallBase(); if (Directory.Exists(MAGIC_UPDATER_PATH)) { FilesWorks.DeleteDirectoryFull(MAGIC_UPDATER_PATH); } if (Directory.Exists(MAGIC_UPDATER_NEW_VER_PATH)) { FilesWorks.DeleteDirectoryFull(MAGIC_UPDATER_NEW_VER_PATH); } } catch (Exception ex) { Program.MainForm?.LogInstallServiceString(ex); AddMessage(ex.Message); NLogger.LogErrorToHdd(ex.ToString()); } }
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); }
protected override void Execution(object sender = null, DoWorkEventArgs e = null) { using (var md5 = MD5.Create()) { using (var stream = File.OpenRead(FILE_PATH)) { if (md5.ComputeHash(stream).ToHex(true) != FILE_MD5) { throw new Exception("Архив платформы отсутствует"); } } } FilesWorks.DecompressZip(ZIP_FILE_PATH, NEW_PLATFORM_LOCAL_PATH); if (!Directory.Exists(NEW_PLATFORM_LOCAL_PATH)) { throw new Exception($"Путь не существует {NEW_PLATFORM_LOCAL_PATH}"); } if (Directory.GetFiles(NEW_PLATFORM_LOCAL_PATH).Count() == 0) { throw new Exception($"Папка пустая {NEW_PLATFORM_LOCAL_PATH}"); } File.Delete(Path.Combine(WindowsStartFolderPath, START_FILE_NAME)); File.Copy(Path.Combine(NEW_PLATFORM_LOCAL_PATH, START_FILE_NAME), Path.Combine(WindowsStartFolderPath, START_FILE_NAME), true); Process process = Process.Start($"{NewPlatformSetupFilePath}", "/S"); if (!process.HasExited) { process.WaitForExit(60000 * 15); } if (!process.HasExited) { throw new Exception("Процесс установки платформы не завершился после 15 минут ожидания. Обновление платформы не выполнено."); } Thread.Sleep(30000); if (new KillProcess1C(this.Id).ActRun()) { } RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SYSTEM\\ControlSet001\\services\\1C:Enterprise 8.3 Server Agent", true); if (myKey != null) { string path = Convert.ToString(myKey.GetValue("ImagePath")); path = path.Replace(OLD_PLATFORM, NEW_PLATFORM); myKey.SetValue("ImagePath", path, RegistryValueKind.String); } myKey.Close(); File.Copy(Path.Combine(NEW_PLATFORM_LOCAL_PATH, BACKBAS_DLL), Path.Combine(LOCAL_BIN_FOLDER_PATH, BACKBAS_DLL), true); var computersList = NetWork.GetNetworkComputerNames(); foreach (var computer in computersList) { var tryCheckExists86 = FilesWorks.IsRemoteFolderExists(REMOTE_PC_LOGIN, computer, REMOTE_PC_PASSWORD, Path.Combine($"\\\\{computer}", REMOTE_PC_PATH_X86)); var tryCheckExists = FilesWorks.IsRemoteFolderExists(REMOTE_PC_LOGIN, computer, REMOTE_PC_PASSWORD, Path.Combine($"\\\\{computer}", REMOTE_PC_PATH)); if (tryCheckExists86.IsComplete) { var res = FilesWorks.CopyFolderToRemotePc(REMOTE_PC_LOGIN, computer, REMOTE_PC_PASSWORD, Path.Combine(NEW_PLATFORM_LOCAL_PATH, CLIENT_FOLDER), Path.Combine($"\\\\{computer}", REMOTE_PC_PATH_X86)); if (!res.IsComplete) { AddErrorMessage($"Ошибка копирования папки Client на компьютер {computer}"); } } else if (tryCheckExists.IsComplete) { var res = FilesWorks.CopyFolderToRemotePc(REMOTE_PC_LOGIN, computer, REMOTE_PC_PASSWORD, Path.Combine(NEW_PLATFORM_LOCAL_PATH, CLIENT_FOLDER), Path.Combine($"\\\\{computer}", REMOTE_PC_PATH)); if (!res.IsComplete) { AddErrorMessage($"Ошибка копирования папки Client на компьютер {computer}"); } } else { if (!tryCheckExists86.IsComplete) { AddErrorMessage(tryCheckExists86.Message); } if (!tryCheckExists.IsComplete) { AddErrorMessage(tryCheckExists.Message); } } } }