Esempio n. 1
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}");
            }
        }
        protected override void ActExecution()
        {
            const string EXTENSION_1C_PROCESSING = ".epf";

            //Чтобы можно было вводить имена файлов с расширением и без
            _name = $"{_name.Replace(EXTENSION_1C_PROCESSING, "")}{EXTENSION_1C_PROCESSING}";

            var res = FtpWorks.DownloadFileFromFtp(MainSettings.Constants.PluginOperationDllDirectoryPath, MainSettings.GlobalSettings.TempFilesFtpPath, _name);

            if (!res.IsComplete)
            {
                throw new Exception(res.Message);
            }

            string fileFullPath = Path.Combine(MainSettings.Constants.PluginOperationDllDirectoryPath, _name);

            if (!File.Exists(fileFullPath))
            {
                throw new Exception($"Файл не существует:{Environment.NewLine}{fileFullPath}");
            }

            var act = new StartWithParameter1C(operationId, Parameters1C.CmdParams1C.ExecProcessing(fileFullPath));

            act.ActRun();

            if (!act.NewProc.HasExited)
            {
                act.NewProc.WaitForExit(60000 * _timeoutMin);
            }

            if (!act.NewProc.HasExited)
            {
                act.NewProc.Kill();
            }
        }
Esempio n. 3
0
        protected override void Execution(object sender = null, DoWorkEventArgs e = null)
        {
            string ftpFilePath   = Path.Combine(FTP_FILE_PATH, FILE_NAME);
            string localFilePath = Path.Combine(LOCAL_FILE_PATH, FILE_NAME);

            var res = FtpWorks.DownloadFileFromFtpOld(localFilePath, ftpFilePath, FTP_LOGIN, FTP_PASSWORD);

            if (!res.IsComplete)
            {
                throw new Exception(res.Message);
            }

            if (!File.Exists(localFilePath))
            {
                throw new Exception($"Файл не существует:{Environment.NewLine}{localFilePath}");
            }

            var act = new MagicUpdaterCommon.CommonActions.StartWithParameter1C(Id, Parameters1C.CmdParams1C.ExecProcessing(localFilePath));

            act.ActRun();

            if (!act.NewProc.HasExited)
            {
                act.NewProc.WaitForExit(60000 * 5);
            }

            if (!act.NewProc.HasExited)
            {
                act.NewProc.Kill();
            }
        }
Esempio n. 4
0
        protected override void Execution(object sender = null, DoWorkEventArgs e = null)
        {
            if (!Directory.Exists(DISTRIB_PATH))
            {
                Directory.CreateDirectory(DISTRIB_PATH);
            }

            if (!Directory.Exists(Path.Combine(DISTRIB_PATH, WGET)))
            {
                Directory.CreateDirectory(Path.Combine(DISTRIB_PATH, WGET));
            }

            if (!File.Exists(Path.Combine(DISTRIB_PATH, WGET, WGET_EXE)))
            {
                var res = FtpWorks.DownloadFileFromFtpOld(Path.Combine(DISTRIB_PATH, WGET, WGET_EXE), Path.Combine(FTP_PATH, WGET_EXE), LOGIN, PASSWORD);
                if (!res.IsComplete)
                {
                    throw new Exception(res.Message);
                }
            }

            var process = Process.Start($"{Path.Combine(DISTRIB_PATH, WGET, WGET_EXE)}", $" -c -nc ftp://{LOGIN}:{PASSWORD}@{FTP_PATH_PART} - P \"{DISTRIB_PATH}\"");
        }
Esempio n. 5
0
        protected override void Execution(object sender = null, DoWorkEventArgs e = null)
        {
            #region Качаем wget
            if (File.Exists(_localWgetPath))
            {
                File.Delete(_localWgetPath);
            }

            FtpWorks.DownloadFileFromFtp(Path.GetDirectoryName(_localWgetPath)
                                         , MainSettings.LocalSqlSettings.SelfUpdateFtpServer
                                         , MainSettings.LocalSqlSettings.SelfUpdateFtpUser
                                         , MainSettings.LocalSqlSettings.SelfUpdateFtpPassword
                                         , _ftpHelpFilesPath
                                         , WGET_EXE);

            if (!File.Exists(_localWgetPath))
            {
                AddErrorMessage($"Не найден файл {_localWgetPath}");
                return;
            }
            #endregion

            if (Attributes.IsForceCreatePath)
            {
                if (!Directory.Exists(Attributes.LocalPath))
                {
                    Directory.CreateDirectory(Attributes.LocalPath);
                }
            }

            if (Attributes.IsOverwrite)
            {
                if (File.Exists(Path.Combine(Attributes.LocalPath, Attributes.FileName)))
                {
                    File.Delete(Path.Combine(Attributes.LocalPath, Attributes.FileName));
                }
            }

            Process process = Process.Start($"{_localWgetPath}", $" -c -nc ftp://{Attributes.FtpLogin}:{Attributes.FtpPassword}@{Attributes.FtpServer}/{Attributes.FtpPath}/{Attributes.FileName} -P \"{Attributes.LocalPath}\"");

            if (Attributes.IsWaitForDownload)
            {
                process.WaitForExit();

                if (File.Exists(Path.Combine(Attributes.LocalPath, Attributes.FileName)))
                {
                    AddCompleteMessage($"Файл {Path.Combine(Attributes.LocalPath, Attributes.FileName)} скачан успешно");
                }
                else
                {
                    AddErrorMessage($"Ошибка закачки файла. Файл на клиенте не обнаружен {Path.Combine(Attributes.LocalPath, Attributes.FileName)}");
                    return;
                }

                if (Attributes.IsExecuteAfterDownload)
                {
                    AddCompleteMessage($"Запуск файла {Path.Combine(Attributes.LocalPath, Attributes.FileName)}");

                    try
                    {
                        ExecuteApplication(Path.Combine(Attributes.LocalPath, Attributes.FileName)
                                           , Attributes.StartupParameters
                                           , Attributes.IsWaitForFileFinishExcecute);

                        if (!Attributes.IsWaitForFileFinishExcecute)
                        {
                            AddCompleteMessage($"Файл {Path.Combine(Attributes.LocalPath, Attributes.FileName)} - запущен успешно");
                        }
                        else
                        {
                            AddCompleteMessage($"Файл {Path.Combine(Attributes.LocalPath, Attributes.FileName)} - запущен успешно и его выполнение завершено");
                        }
                    }
                    catch (Exception ex)
                    {
                        AddErrorMessage($"Ошибка выполнения файла {Path.Combine(Attributes.LocalPath, Attributes.FileName)}. Original: {ex.ToString()}");
                    }
                }
            }
            else
            {
                AddCompleteMessage($"Закачка файла {Path.Combine(Attributes.LocalPath, Attributes.FileName)} начата.");
            }
        }
        private void InstallBase()
        {
            Directory.CreateDirectory(_magicUpdaterPath);

            Program.MainForm?.LogInstallServiceString($"Копирование файла {MainSettings.Constants.SETTINGS_JSON_FILE_NAME}.");
            if (File.Exists(Path.Combine(_magicUpdaterPath, MainSettings.Constants.SETTINGS_JSON_FILE_NAME)))
            {
                File.Delete(Path.Combine(_magicUpdaterPath, MainSettings.Constants.SETTINGS_JSON_FILE_NAME));
            }
            File.Copy(MainSettings.JsonSettingsFileFullPath, Path.Combine(_magicUpdaterPath, MainSettings.Constants.SETTINGS_JSON_FILE_NAME));
            Program.MainForm?.LogInstallServiceString($"Копирование файла {MainSettings.Constants.SETTINGS_JSON_FILE_NAME} успешно завершено.");


            Thread.Sleep(1000);

            Program.MainForm?.LogInstallServiceString("Скачиваем новую версию приложения для перезапуска для агента");
            //Копируем новый MagicUpdater целиком!
            #region Копируем новый MagicUpdater целиком!
            Directory.CreateDirectory(_magicUpdaterPath);

            //Restart applivation
            var resReatartApp = FtpWorks.DownloadFilesFromFtpFolder(MainSettings.LocalSqlSettings.SelfUpdateFtpServer
                                                                    , MainSettings.LocalSqlSettings.SelfUpdateFtpUser
                                                                    , MainSettings.LocalSqlSettings.SelfUpdateFtpPassword
                                                                    , Path.Combine(MainSettings.LocalSqlSettings.SelfUpdateFtpPath, MainSettings.Constants.MU_RESTART_FOLDER_NAME)
                                                                    , Path.Combine(_magicUpdaterPath, MainSettings.Constants.MU_RESTART_FOLDER_NAME)
                                                                    , "*");

            if (!resReatartApp.IsComplete)
            {
                throw new Exception(resReatartApp.Message);
            }
            else
            {
                Program.MainForm?.LogInstallServiceString($"Закачка нового {MainSettings.Constants.MAGIC_UPDATER_RESTART} - завешена");
                AddMessage($"Закачка нового {MainSettings.Constants.MAGIC_UPDATER_RESTART} - завешена");
            }

            //Agent
            Program.MainForm?.LogInstallServiceString("Скачиваем новую версию агента");
            var resAgent = FtpWorks.DownloadFilesFromFtpFolder(MainSettings.LocalSqlSettings.SelfUpdateFtpServer
                                                               , MainSettings.LocalSqlSettings.SelfUpdateFtpUser
                                                               , MainSettings.LocalSqlSettings.SelfUpdateFtpPassword
                                                               , MainSettings.LocalSqlSettings.SelfUpdateFtpPath
                                                               , _magicUpdaterPath
                                                               , "*");

            if (!resAgent.IsComplete)
            {
                throw new Exception(resAgent.Message);
            }
            else
            {
                Program.MainForm?.LogInstallServiceString($"Закачка нового {SERVICE_NAME} - завешена");
                AddMessage($"Закачка нового {SERVICE_NAME} - завешена");
            }
            #endregion Копируем новый MagicUpdater целиком!

            //Устанавливаем службу с режимом автозапуска
            //Запускаем службу
            Thread.Sleep(3000);

            try
            {
                Program.MainForm?.LogInstallServiceString($"Установка новой службы {SERVICE_NAME}");

                InstallService(_servicePath, SERVICE_NAME, SERVICE_DISPLAY_NAME);

                Program.MainForm?.LogInstallServiceString($"Новая служба {SERVICE_NAME} - установлена и запущена");
                AddMessage($"Новая служба {SERVICE_NAME} - установлена и запущена");

                //для отложенного запуска
                Thread.Sleep(3000);
                //Меняем режим запуска на отложенный
                Process changeProcess = Process.Start("sc.exe", $"config {SERVICE_NAME} start= delayed-auto");
                changeProcess.WaitForExit(10000);
                Program.MainForm?.LogInstallServiceString($"Для службы {SERVICE_NAME} - установлен отложенный запуск.");
                //sc.exe config MagicUpdater start= delayed-auto
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        protected override void ActExecution()
        {
            this._logText = new StringBuilder();
            const string SETUP_FILE_NAME       = @"apache-couchdb-2.0.0.1.msi";
            const string DEFAULT_INI_FILE_NAME = "default.ini";
            const string INI_DESTINATION_PATH_WITHOUT_DRIVE = @"CouchDB\etc";
            const string DIRECTORY_NAME = "CouchDB";
            const string FTP_HOST       = @"mskftp.sela.ru";
            const string LOGIN          = "******";
            const string PASSWORD       = "******";
            const int    SERVICE_RESTART_TIMEOUT_MILLISECONDS = 10000;
            const string COUCH_DB_SERVICE_NAME = "Apache CouchDB";

            const string ADMIN_LOGIN    = "******";
            const string ADMIN_PASSWORD = "******";
            const string MARK_FILENAME  = @"C:\SystemUtils\CouchDB_Marker";

            if (File.Exists(MARK_FILENAME))
            {
                Log($"Marker file was: {MARK_FILENAME} was found.");
                SendReportToDB($"{this._logText.ToString()}{Environment.NewLine}CouchDB was already installed on this computer.", true);
                return;
            }

            Log($"Download from FTP {SETUP_FILE_NAME}");

            var setupFileFullPath  = Path.Combine(Path.GetTempPath(), SETUP_FILE_NAME); //Очистить
            var defaultIniFullPath = Path.Combine(Path.GetTempPath(), DEFAULT_INI_FILE_NAME);

            try
            {
                FtpWorks.DownloadFileFromFtp(Path.GetTempPath(), FTP_HOST, LOGIN, PASSWORD, "Couch", SETUP_FILE_NAME);
                FtpWorks.DownloadFileFromFtp(Path.GetTempPath(), FTP_HOST, LOGIN, PASSWORD, "Couch", DEFAULT_INI_FILE_NAME);
                //using (Ftp client = new Ftp())
                //            {
                //                client.Connect(FTP_HOST);
                //                client.Login(LOGIN, PASSWORD);
                //                client.Download(Path.Combine("Couch", SETUP_FILE_NAME), setupFileFullPath);
                //                client.Download(Path.Combine("Couch", DEFAULT_INI_FILE_NAME), defaultIniFullPath);
                //                client.Close();
                //            }
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка загрузки файлов по FTP:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                return;
            }

            Log($"Download complete");

            Log($"Lauching {SETUP_FILE_NAME}...");
            try
            {
                var setupResult = ExecuteApplication(setupFileFullPath, " /passive"); // (/quiet) /passive - для автоматической установки с показом полосы прогресса
                Log($"Setup was completed with code {setupResult}");
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка инсталлятора:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                return;
            }

            Log("Check drive letter...");
            var    allDrives     = DriveInfo.GetDrives();
            string currentLetter = "";

            foreach (var drive in allDrives)
            {
                Log(drive.Name);
                if (Directory.Exists(Path.Combine(drive.Name, DIRECTORY_NAME)))
                {
                    Log($"{drive.Name} - current drive");
                    currentLetter = drive.Name;
                    break;
                }
            }
            var iniDestinationFullPath = Path.Combine(currentLetter, INI_DESTINATION_PATH_WITHOUT_DRIVE);

            if (!Directory.Exists(iniDestinationFullPath))
            {
                Log($"Path {iniDestinationFullPath} wasn't found.");
                SendReportToDB($"{"Лог: "}{this._logText.ToString()}");
                return;
            }

            try
            {
                Log("Backup current ini-file...");
                var iniFileFullName = Path.Combine(iniDestinationFullPath, DEFAULT_INI_FILE_NAME);
                var iniFileBackUp   = $"{iniFileFullName}_backup";
                if (File.Exists(iniFileBackUp))
                {
                    System.IO.File.Delete(iniFileBackUp);
                }
                File.Move(iniFileFullName, iniFileBackUp);

                Log("Copy ini-file...");

                File.Copy(defaultIniFullPath, iniFileFullName, true);
                if (!File.Exists(iniFileFullName))
                {
                    Log($"Error! {iniFileFullName} nor found.");
                    SendReportToDB($"{"Лог: "}{this._logText.ToString()}");
                    return;
                }
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка при замене ini-файла:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                return;
            }

            var request = new Requests();

            try
            {
                Log("Add new bases");

                request.SendPut(@"http://*****:*****@"http://127.0.0.1:5984/_replicator", new byte[0]);
                request.SendPut(@"http://127.0.0.1:5984/_global_changes", new byte[0]);
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка при создании баз:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                return;
            }

            Log("Restart service");
            this.RestartService(COUCH_DB_SERVICE_NAME, SERVICE_RESTART_TIMEOUT_MILLISECONDS);

            try
            {
                Log("Add Admin"); // adm 123
                var localIninFulFileName = Path.Combine(iniDestinationFullPath, "local.ini");
                var localIniFile         = File.ReadAllLines(localIninFulFileName);
                for (int i = 0; i < localIniFile.Length; i++)
                {
                    if (localIniFile[i] == ";admin = mysecretpassword")
                    {
                        localIniFile[i] = "adm = -pbkdf2-4ba62a224fb986d7a08926f131eab71ce8b0ce22,7e5241170e58517b739181ce79ae82f0,10";
                    }
                }
                File.WriteAllLines(localIninFulFileName, localIniFile);
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка при добавлении администратора:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                return;
            }

            Log("Restart service");
            RestartService(COUCH_DB_SERVICE_NAME, SERVICE_RESTART_TIMEOUT_MILLISECONDS);

            try
            {
                var json     = "{\"_id\": \"replicationtocenter\",\"source\":  \"http://*****:*****@retailcenter.sela.ru:5984/dk_0_remote\",\"target\":  \"http://*****:*****@localhost:5984/dk_0_remote\", \"continuous\":true, \"create_target\": true}";
                var response = request.SendPost("http://localhost:5984/_replicator", json, ADMIN_LOGIN, ADMIN_PASSWORD);
                Log($"Результат POST-запроса: {Environment.NewLine}{response}");
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка при выполнении POST-запроса:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                return;
            }

            try
            {
                // Чистим временные файлы
                File.Delete(setupFileFullPath);
                File.Delete(defaultIniFullPath);
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка при очистке временных файлов:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                return;
            }

            // Добавляем создание маркера успешной установки
            try
            {
                if (!File.Exists(MARK_FILENAME))
                {
                    File.WriteAllLines(MARK_FILENAME, new string[0]);
                    Log("Success-marker file was added.");
                }
                else
                {
                    Log("Success-marker file already exists.");
                }
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка при создании маркера успешной установки:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                return;
            }

            SendReportToDB($"{this._logText.ToString()}{Environment.NewLine}CouchDB setup was successfully completed.", true);
        }
        protected override void ActExecution()
        {
            const string BAT_FILE_NAME          = @"commands.bat";
            const string CURL_EXE_FILE_NAME     = @"curl.exe";
            const string CURL_CRT_EXE_FILE_NAME = @"ca-bundle.crt";

            const string DIRECTORY_NAME        = "Curl";
            const string FTP_HOST              = @"mskftp.sela.ru";
            const string LOGIN                 = "******";
            const string PASSWORD              = "******";
            const string DESTINATION_DIRECTORY = @"C:\SystemUtils\Curl";

            this._logText = new StringBuilder();
            Log($"Download from FTP {CURL_EXE_FILE_NAME}");

            if (!Directory.Exists(DESTINATION_DIRECTORY))
            {
                Directory.CreateDirectory(DESTINATION_DIRECTORY);
                Log($"Directory {DESTINATION_DIRECTORY} was created");
            }

            var batFileFullPath = Path.Combine(DESTINATION_DIRECTORY, BAT_FILE_NAME);
            var curlFullPath    = Path.Combine(DESTINATION_DIRECTORY, CURL_EXE_FILE_NAME);
            var curlCrtFullPath = Path.Combine(DESTINATION_DIRECTORY, CURL_CRT_EXE_FILE_NAME);


            try
            {
                FtpWorks.DownloadFileFromFtp(DESTINATION_DIRECTORY, FTP_HOST, LOGIN, PASSWORD, DIRECTORY_NAME, BAT_FILE_NAME);
                FtpWorks.DownloadFileFromFtp(DESTINATION_DIRECTORY, FTP_HOST, LOGIN, PASSWORD, DIRECTORY_NAME, CURL_EXE_FILE_NAME);
                FtpWorks.DownloadFileFromFtp(DESTINATION_DIRECTORY, FTP_HOST, LOGIN, PASSWORD, DIRECTORY_NAME, CURL_CRT_EXE_FILE_NAME);
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка загрузки файлов по FTP:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                return;
            }


            Log($"Executing command...");
            var executionResult = new List <string>();

            try
            {
                //this._command = @"http://localhost:5984/dk_0_remote";
                executionResult = ExecuteApplicationWithResult(curlFullPath, this._command);
                //var executionResult = ExecuteApplication(batFileFullPath, "");
                Log($"Executing completed, code {executionResult}");
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка выполнения команды:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}{Environment.NewLine}Console text: {string.Join(Environment.NewLine, executionResult.ToArray())}");
                return;
            }

            //this._parameterName = "doc_count";
            var resultText = string.Empty;

            if (string.IsNullOrEmpty(this._parameterName))
            {
                resultText = $"{this._logText.ToString()}{Environment.NewLine}CouchDB COMMAND was successfully completed.{Environment.NewLine}{string.Join(Environment.NewLine, executionResult.ToArray())}";
            }
            else
            {
                dynamic model = (dynamic)(NewtonJson.GetModelFromJson(string.Join(Environment.NewLine, executionResult.ToArray())));
                resultText = (string)((Newtonsoft.Json.Linq.JObject)model).GetValue(this._parameterName);
            }

            Result = resultText;
        }