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()); } }
private void SendSelfUpdateOperationReport() { if (MainSettings.StartOperationId > 0) { Operation.AddOperState(MainSettings.StartOperationId, OperStates.End); Operation.SendOperationReport(MainSettings.StartOperationId, "", true); } }
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."; }
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); } }