Example #1
0
        private static void SendMessagesToOperation(bool isCompleted)
        {
            try
            {
                if (_operationId == 0)
                {
                    return;
                }


                string logErrorPath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "installServiceLogs/errors");
                string logDebugPath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "installServiceLogs/debug");
                string errorLogText = null;
                string debugLogText = null;

                try
                {
                    DirectoryInfo errorDirectoryInfo = new DirectoryInfo(logErrorPath);
                    foreach (FileInfo errFile in errorDirectoryInfo.GetFiles())
                    {
                        if (string.IsNullOrEmpty(errorLogText))
                        {
                            errorLogText = File.ReadAllText(errFile.FullName, Encoding.GetEncoding("windows-1251"));
                        }
                        else
                        {
                            errorLogText += $"{Environment.NewLine}{File.ReadAllText(errFile.FullName, Encoding.GetEncoding("windows-1251"))}";
                        }
                    }
                }
                catch { }

                try
                {
                    DirectoryInfo debugDirectoryInfo = new DirectoryInfo(logDebugPath);
                    foreach (FileInfo debugFile in debugDirectoryInfo.GetFiles())
                    {
                        if (string.IsNullOrEmpty(errorLogText))
                        {
                            debugLogText = File.ReadAllText(debugFile.FullName, Encoding.GetEncoding("windows-1251"));
                        }
                        else
                        {
                            debugLogText += $"{Environment.NewLine}{File.ReadAllText(debugFile.FullName, Encoding.GetEncoding("windows-1251"))}";
                        }
                    }
                }
                catch { }

                string mess = $"Debug:{Environment.NewLine}{debugLogText}{Environment.NewLine}Errors:{Environment.NewLine}{errorLogText}";
                //string mess = "sdasdasd";
                Operation.SendOperationReport(_operationId, mess, isCompleted);
                Operation.AddOperState(_operationId, OperStates.End);
            }
            catch (Exception ex)
            {
                NLogger.LogErrorToHdd(ex.ToString());
            }
        }
Example #2
0
 private void SendSelfUpdateOperationReport()
 {
     if (MainSettings.StartOperationId > 0)
     {
         Operation.AddOperState(MainSettings.StartOperationId, OperStates.End);
         Operation.SendOperationReport(MainSettings.StartOperationId, "", true);
     }
 }
Example #3
0
        protected override void ActExecution()
        {
            const string ADMIN_LOGIN    = "******";
            const string ADMIN_PASSWORD = "******";

            const string INI_DESTINATION_PATH_WITHOUT_DRIVE = @"CouchDB\etc";
            const string DIRECTORY_NAME = "CouchDB";

            const int    SERVICE_RESTART_TIMEOUT_MILLISECONDS = 10000;
            const string COUCH_DB_SERVICE_NAME = "Apache CouchDB";

            const string MARK_FILENAME = @"C:\SystemUtils\CouchDB_Marker_Replication_Retry_Count_INDEX ";

            this._logText = new StringBuilder();

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

            //var request = new Requests();

            #region Change document example

            /*
             * try
             * {
             * var response = request.SendGet("http://*****:*****@retailcenter.sela.ru:5984/dk_0_remote\"," +
             * "\"target\": \"http://*****:*****@localhost:5984/dk_0_remote\"," +
             * "\"continuous\": true," +
             * "\"create_target\": true," +
             * "\"owner\": \"adm\"," +
             * "\"_replication_state\": \"completed\"," +
             * "\"_replication_state_time\": \"2017-03-11T13:00:45+03:00\"," +
             * "\"_replication_state_reason\": \"\"," +
             * "\"_replication_id\": \"7d12141a3205e5f3cfc3b88964190cfc\"," +
             * "\"cancel\": true" +
             * "}";
             * var response1 = request.SendPost("http://*****:*****@retailcenter.sela.ru:5984/dk_0_remote\",\"target\":  \"http://*****:*****@localhost:5984/dk_0_remote\", \"continuous\":true, \"create_target\":  true}";
             *
             * var response2 = request.SendPost("http://*****:*****@"by_code...");
                request.SendGetNoReturn(@"http://*****:*****@"by_phone...");
                request.SendGetNoReturn(@"http://*****:*****@"by_owner...");
                request.SendGetNoReturn(@"http://localhost:5984/dk_0_remote/_design/doc/_view/by_owner", ADMIN_LOGIN, ADMIN_PASSWORD);
                Log("Finished");
            }
            catch (Exception ex)
            {
                SendReportToDB($"Ошибка при создании индексов:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}");
                Operation.SendOperationReport(operationId, ex.Message, false);
                Operation.AddOperState(operationId, OperStates.End);
                IsComplete      = false;
                MsgForoperation = $"Ошибка при создании индексов:{Environment.NewLine}{ex.ToString()}{Environment.NewLine}{"Лог: "}{this._logText.ToString()}";
                return;
            }

            Operation.AddOperState(operationId, OperStates.End);



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


            SendReportToDB($"{this._logText.ToString()}{Environment.NewLine}CouchDB INDEXES were successfully CONFIGURED.", true);
            MsgForoperation = $"{this._logText.ToString()}{Environment.NewLine}CouchDB INDEXES were successfully CONFIGURED.";
        }
Example #4
0
        static void Main(string[] args)
        {
            #region Initialization
            //Загружаем все настройки
            var loadSettingsResult = MainSettings.LoadSettings();
            if (!loadSettingsResult.IsComplete)
            {
                NLogger.LogErrorToHdd(loadSettingsResult.NamedMessage, MainSettings.Constants.MAGIC_UPDATER);
                return;
            }

            //Инициализируем переменные
            _currentVersionPath       = Path.GetDirectoryName(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
            _newVersionPath           = MainSettings.LocalSqlSettings.SelfUpdatePath;
            _currentVersionBackupPath = Path.Combine(_currentVersionPath, "backup");
            _currentVersionExeName    = Path.Combine(_currentVersionPath, MainSettings.Constants.MAGIC_UPDATER_EXE);
            _newVersionExeName        = Path.Combine(_newVersionPath, MainSettings.Constants.MAGIC_UPDATER_EXE);
            _searchPatterns           = new string[]
            {
                "*.exe",
                "*.dll",
                "*.xml",
                "*.config",
                "*.pdb",
                "*.manifest",
            };

            _operationId = 0;
            #endregion Initialization

            if (args != null && args.Length == 2)
            {
                #region setOperationId
                try
                {
                    _operationId = Convert.ToInt32(args[1]);
                }
                catch (Exception ex)
                {
                    _operationId = 0;
                    NLogger.LogErrorToHdd($"{ex.Message}{Environment.NewLine}{ex.ToString()}", MainSettings.Constants.MAGIC_UPDATER_RESTART);
                }
                #endregion setOperationId

                #region restart
                if (args[0] == MainSettings.Constants.RESTART_PARAMETER)
                {
                    ServiceController service = new ServiceController(MainSettings.Constants.SERVICE_NAME);
                    TimeSpan          timeout = TimeSpan.FromMilliseconds(RESTART_TIMEOUT);
                    try
                    {
                        if (service.Status == ServiceControllerStatus.Running)
                        {
                            service.Stop();
                            service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
                            Tools.WaitAllProcessByname(MainSettings.Constants.MAGIC_UPDATER);

                            Thread.Sleep(3000);

                            //Если эта зараза повисла то кильнем, иначе крышка
                            foreach (var proc in Process.GetProcessesByName(MainSettings.Constants.MAGIC_UPDATER))
                            {
                                proc.Kill();
                            }

                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running, timeout);
                        }
                        else if (service.Status == ServiceControllerStatus.Stopped)
                        {
                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running, timeout);
                        }

                        //Отправляем сообщение еще одному приложению MagicUpdaterRestart для того чтобы оно запустило MagicUpdaterSettings с UI
                        //new StartSettingsViaPipe(_operationId).ActRun();

                        //Меняем состояние операции
                        if (_operationId > 0)
                        {
                            Operation.AddOperState(_operationId, OperStates.End);
                            Operation.SendOperationReport(_operationId, "", true);
                        }
                    }
                    catch (Exception ex)
                    {
                        //Если службу не удалось нормлаьно остановитиь, то киляем ее процесс и пробуем запустить.
                        try
                        {
                            foreach (var proc in Process.GetProcessesByName(MainSettings.Constants.MAGIC_UPDATER))
                            {
                                proc.Kill();
                            }

                            Thread.Sleep(3000);

                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running, timeout);

                            if (_operationId > 0)
                            {
                                Operation.AddOperState(_operationId, OperStates.End);
                                Operation.SendOperationReport(_operationId, $"Не удалось штатно остановить службу, служба была остановлена принудительно и перезапущена. Ошибка штатной остановки: {ex.Message}", true);
                            }
                            NLogger.LogErrorToHdd($"{ex.Message}{Environment.NewLine}{ex.ToString()}", MainSettings.Constants.MAGIC_UPDATER_RESTART);
                        }
                        catch (Exception exx)
                        {
                            if (_operationId > 0)
                            {
                                Operation.AddOperState(_operationId, OperStates.End);
                                Operation.SendOperationReport(_operationId, $"Не удалось перезапустить службу MagicUpdater. Ошибка: {exx.Message}", false);
                            }
                            NLogger.LogErrorToHdd($"{exx.Message}{Environment.NewLine}{exx.ToString()}", MainSettings.Constants.MAGIC_UPDATER_RESTART);
                        }
                    }
                }
                #endregion restart

                #region updateRestart
                if (args[0] == MainSettings.Constants.UPDATE_RESTART_PARAMETER)
                {
                    try
                    {
                        ServiceController service = new ServiceController(MainSettings.Constants.SERVICE_NAME);
                        TimeSpan          timeout = TimeSpan.FromMilliseconds(RESTART_TIMEOUT);
                        if (service.Status == ServiceControllerStatus.Running)
                        {
                            service.Stop();
                            service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
                            Tools.WaitAllProcessByname(MainSettings.Constants.MAGIC_UPDATER);

                            Thread.Sleep(3000);

                            //Если эта зараза повисла то кильнем, иначе крышка
                            foreach (var proc in Process.GetProcessesByName(MainSettings.Constants.MAGIC_UPDATER))
                            {
                                proc.Kill();
                            }

                            CopyNewVersionFiles();
                            Thread.Sleep(1000);
                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running, timeout);
                        }
                        else if (service.Status == ServiceControllerStatus.Stopped)
                        {
                            CopyNewVersionFiles();
                            Thread.Sleep(3000);
                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running, timeout);
                        }

                        //Отправляем сообщение еще одному приложению MagicUpdaterRestart для того чтобы оно запустило MagicUpdaterSettings с UI
                        //new StartSettingsViaPipe(_operationId).ActRun();

                        //Меняем состояние операции
                        if (_operationId > 0)
                        {
                            Operation.AddOperState(_operationId, OperStates.End);
                            Operation.SendOperationReport(_operationId, "", true);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (_operationId > 0)
                        {
                            Operation.SendOperationReport(_operationId, $"Не удалось перезапустить обновленную версию службы службу MagicUpdater. Original: {ex.ToString()}", false);
                        }
                        NLogger.LogErrorToHdd($"Не удалось перезапустить обновленную версию службы службу MagicUpdater. Original: {ex.ToString()}", MainSettings.Constants.MAGIC_UPDATER_RESTART);
                    }
                }
                #endregion updateRestart

                #region waitForStartMagicUpdaterSettingsViaPipe
                if (args[0] == MainSettings.Constants.WAIT_FOR_START_SETTINGS_PARAMETER)
                {
                    try
                    {
                        bool startSettingsMessageRecieved = false;
                        Task.Factory.StartNew(() =>
                        {
                            PipeServer pipeServer = new PipeServer();
                            var res = pipeServer.RecieveSyncMessage();

                            if (res.ActionType == CommunicationActionType.StartMagicUpdaterSettings)
                            {
                                Tools.StartMagicUpdaterSettings();
                            }

                            startSettingsMessageRecieved = true;
                        });

                        while (!startSettingsMessageRecieved)
                        {
                        }
                    }
                    catch (Exception ex)
                    {
                        if (_operationId > 0)
                        {
                            Operation.SendOperationReport(_operationId, $"Не удалось запустить MagicUpdaterRestart для MagicUpdaterSettings. Original: {ex.ToString()}", false);
                        }
                        NLogger.LogErrorToHdd($"Не удалось запустить MagicUpdaterRestart для MagicUpdaterSettings. Original: {ex.ToString()}", MainSettings.Constants.MAGIC_UPDATER_RESTART);
                    }
                }
                #endregion waitForStartMagicUpdaterSettingsViaPipe
            }
            else
            {
                NLogger.LogErrorToHdd($"Обшибочные параметры запуска.", MainSettings.Constants.MAGIC_UPDATER_RESTART);
            }
        }