예제 #1
0
 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}");
     }
 }
예제 #2
0
        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}");
            }
        }
예제 #3
0
 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);
     }
 }
예제 #4
0
        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;
            }
        }
예제 #5
0
        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());
            }
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
                    }
                }
            }
        }