private void SettingsForm_Load(object sender, EventArgs e) { try { var loadFromJsonResult = MainSettings.LoadFromJson(); if (!loadFromJsonResult.IsComplete) { //NLogger.LogErrorToHdd(res.Message, MainSettings.Constants.MAGIC_UPDATER_SETTINGS); //MessageBox.Show(res.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } //JsonSettings txtServerTask.Text = MainSettings.JsonSettings.ServerTask; txtBaseTask.Text = MainSettings.JsonSettings.BaseTask; txtUserTask.Text = MainSettings.JsonSettings.UserTask; txtPasswordTask.Text = MainSettings.JsonSettings.PasswordTask; var loadSettingsResult = MainSettings.LoadSettings(); if (!loadSettingsResult.IsComplete) { return; } cbShopID.DisplayMember = "ShopId"; cbShopID.ValueMember = "ShopId"; cbShopID.DataSource = SqlWorks.ExecProc("SelectShopsList").Tables[0]; //SqlSettings cbShopID.Text = MainSettings.MainSqlSettings.ShopID; txtServer1C.Text = MainSettings.LocalSqlSettings.Server1C; txtBase1C.Text = MainSettings.LocalSqlSettings.Base1C; txtUser1C.Text = MainSettings.LocalSqlSettings.User1C; txtPass1C.Text = MainSettings.LocalSqlSettings.Pass1C; txtVersion1C.Text = MainSettings.LocalSqlSettings.Version1C; txtTimeOut.Text = MainSettings.LocalSqlSettings.OperationsListCheckTimeout.ToString(); txtSelfUpdatePath.Text = MainSettings.LocalSqlSettings.SelfUpdatePath; cbIsMainCashbox.Checked = MainSettings.MainSqlSettings.IsMainCashbox; cbIsServerLocated.Checked = MainSettings.MainSqlSettings.Is1CServer; cbIsCheck1C.Checked = MainSettings.LocalSqlSettings.IsCheck1C; } catch (Exception ex) { ConnectionToService?.DisposeAsyncClient(); MessageBox.Show(ex.Message.ToString(), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); NLogger.LogErrorToHdd(ex.Message.ToString(), MainSettings.Constants.MAGIC_UPDATER_SETTINGS); Application.Exit(); } }
private bool Initialize() { if (!File.Exists(MainSettings.JsonSettingsFileFullPath)) { NLogger.LogErrorToHdd("Json - файл настроек не найден", MainSettings.Constants.MAGIC_UPDATER); return(false); } //Загружаем все настройки TryLoadMainSettings loadSettingsResult = MainSettings.LoadSettings(); while (!loadSettingsResult.IsComplete) { NLogger.LogErrorToHdd(loadSettingsResult.NamedMessage, MainSettings.Constants.MAGIC_UPDATER); Thread.Sleep(60000); loadSettingsResult = MainSettings.LoadSettings(); } if (MainSettings.MainSqlSettings.ComputerId == null || MainSettings.MainSqlSettings.ComputerId == 0) { NLogger.LogErrorToHdd("Ошибка регистрации компьютера. Не получен ComputerId.", MainSettings.Constants.MAGIC_UPDATER); return(false); } //Отчитываемся о том, что настройки прочитаны SqlWorks.ExecProc("SetIsAgentSettingsReaded", MainSettings.MainSqlSettings.ComputerId, true); //Если не режим отладки плагинов if (!_isPluginDebugMode) { SqlWorks.ExecProc("UpdateVersion", MainSettings.MainSqlSettings.ComputerId, Extensions.GetApplicationVersion()); TaskerReporter.Start(); RestartTaskerReporter.Start(); switch (MainSettings.LocalSqlSettings.PerformanceCounterMode) { case 0: break; case 1: PerformanceReporter.StartOnlyAvg(); break; case 2: PerformanceReporter.StartAll(); break; } } return(true); }
private void AppLoadSettings() { MainSettings.LoadSettings(); MainSettings.LoadListColumnsWidth(); }
private void btnNextStep_Click(object sender, EventArgs e) { Button button = sender as Button; int tag = (int)button.Tag; switch (tag) { case 1: //Сохраняем Json var formJson = new JsonLocalSettings { BaseTask = txtBaseTask.Text, ServerTask = txtServerTask.Text, PasswordTask = txtPasswordTask.Text, UserTask = txtUserTask.Text }; if (!CheckSQLConnection(formJson, false)) { return; } NewtonJson.WriteJsonFile(formJson, MainSettings.JsonSettingsFileFullPath); break; case 2: //Сохраняем главные настройки компьютера var formSqlMainSettings = new SqlMainSettings { ComputerId = MainSettings.MainSqlSettings.ComputerId, Is1CServer = cbIsServerLocated.Checked, IsMainCashbox = cbIsMainCashbox.Checked, ShopID = cbShopID.Text }; SqlWorks.SaveMainSqlSettingsToBase(formSqlMainSettings); //Сохраняем дополнительные настройки компьютера SqlWorks.SaveLocalSqlSettingsToBase(new SqlLocalSettings { Server1C = txtServer1C.Text, Base1C = txtBase1C.Text, User1C = txtUser1C.Text, Pass1C = txtPass1C.Text, Version1C = txtVersion1C.Text, IsCheck1C = cbIsCheck1C.Checked, SelfUpdatePath = txtSelfUpdatePath.Text, OperationsListCheckTimeout = Convert.ToInt32(txtTimeOut.Text) }); var loadSettingsresult = MainSettings.LoadSettings(); if (!loadSettingsresult.IsComplete) { MessageBox.Show(loadSettingsresult.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else { Tools.SelfRestart(0); //TODO: тут нужно как-то дать знать на форму что служба перезапущена и все заебись! Hide(); notifyIcon1.Visible = true; } break; } ActivateSettingsPage(tabPageSettings); }
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); } }
private void btnNextStep_Click(object sender, EventArgs e) { Button button = sender as Button; Pages page = (Pages)button.Tag; int tag = (int)button.Tag; switch (page) { case Pages.JsonSettings: #region JsonSettings //Сохраняем Json try { btnNextStep.Enabled = false; var formJson = new JsonLocalSettings { BaseTask = txtBaseTask.Text, ServerTask = txtServerTask.Text, PasswordTask = txtPasswordTask.Text, UserTask = txtUserTask.Text }; if (!CheckSQLConnection(formJson, false)) { LogString("Ошибка при попытке установить соединение с Sql базой заданий"); return; } LogString("Тест соединения с Sql базой заданий успешно пройден."); try { LogString("Создание Json - файла с настроками."); NewtonJson.WriteJsonFile(formJson, MainSettings.JsonSettingsFileFullPath); } catch (Exception ex) { LogString(ex); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } LogString("Json с настройками подключения к базе заданий создан успешно."); LogString("Проверка Json - файла."); var loadFromJsonResult = MainSettings.LoadFromJson(); if (!loadFromJsonResult.IsComplete) { LogString(loadFromJsonResult.Message); MessageBox.Show(loadFromJsonResult.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } LogString("Проверка Json - файла завершена успешно."); cbShopID.DisplayMember = "ShopId"; cbShopID.ValueMember = "ShopId"; cbShopID.DataSource = SqlWorks.ExecProc("SelectShopsList")?.Tables[0]; LogString("Поиск настроек агента в Sql базе заданий."); var loadSettingsResult = MainSettings.LoadSettings(); if (!loadSettingsResult.IsComplete) { LogString($"{loadSettingsResult.Message} - настройки не найдены."); try { //Пробуем узнать версию 1С LogString("Пробуем узнать версию 1С"); const string CONST_PART_1C_AGENT_PATH = "\\bin\\ragent.exe"; foreach (ServiceController sc in ServiceController.GetServices()) { using (ManagementObject wmiService = new ManagementObject("Win32_Service.Name='" + sc.ServiceName + "'")) { wmiService.Get(); string currentserviceExePath = wmiService["PathName"].ToString(); if (currentserviceExePath.Contains(CONST_PART_1C_AGENT_PATH)) { currentserviceExePath = currentserviceExePath.Replace(CONST_PART_1C_AGENT_PATH, "|"); string pathCropped = currentserviceExePath.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries).First(); txtVersion1C.Text = pathCropped.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries).Last(); //Показываем baloon tool tip о том что версия была определена автоматически и может быть не корректной _isShowVersion1cToolTip = true; break; } } } } catch (Exception ex) { LogString(ex); } } else { LogString($"Настройки найдены."); //SqlSettings cbShopID.SelectedValue = MainSettings.MainSqlSettings.ShopID; tbBase1C.Text = MainSettings.LocalSqlSettings.Base1C; _is1CBaseOnServer = MainSettings.LocalSqlSettings.Is1CBaseOnServer; tbServerOrPath1C.Text = (MainSettings.LocalSqlSettings.Is1CBaseOnServer ? MainSettings.LocalSqlSettings.Server1C : MainSettings.LocalSqlSettings.InformationBaseDirectory); tbBase1C.Text = MainSettings.LocalSqlSettings.Base1C; txtUser1C.Text = MainSettings.LocalSqlSettings.User1C; txtPass1C.Text = MainSettings.LocalSqlSettings.Pass1C; txtVersion1C.Text = MainSettings.LocalSqlSettings.Version1C; txtTimeOut.Text = MainSettings.LocalSqlSettings.OperationsListCheckTimeout.ToString(); txtSelfUpdatePath.Text = MainSettings.LocalSqlSettings.SelfUpdatePath; cbIsMainCashbox.Checked = MainSettings.MainSqlSettings.IsMainCashbox; cbIsServerLocated.Checked = MainSettings.MainSqlSettings.Is1CServer; cbIsCheck1C.Checked = MainSettings.LocalSqlSettings.IsCheck1C; tbSelfUpdateFtpServer.Text = MainSettings.LocalSqlSettings.SelfUpdateFtpServer; tbSelfUpdateFtpUser.Text = MainSettings.LocalSqlSettings.SelfUpdateFtpUser; tbSelfUpdateFtpPassword.Text = MainSettings.LocalSqlSettings.SelfUpdateFtpPassword; tbSelfUpdateFtpPath.Text = MainSettings.LocalSqlSettings.SelfUpdateFtpPath; } } finally { btnNextStep.Enabled = true; } ActivateSettingsPage(tabPageSettings); #endregion break; case Pages.MainAndLocalSqlSettings: #region MainAndLocalSqlSettings //Если компьютер не зарегистрирован, то регистрируем его #region RegisterAgent if (MainSettings.MainSqlSettings == null || !MainSettings.MainSqlSettings.ComputerId.HasValue || MainSettings.MainSqlSettings.ComputerId.Value == 0) { LogString("Компьютер не зарегистрирован... Производится регистрация компьютера."); var res = MainSettings.RegisterComputerId(ConvertSafe.ToString(cbShopID.SelectedValue)); if (!res.IsComplete) { LogString(res.Message); MessageBox.Show(res.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } LogString("Регистрация компьютера произведена успешно."); LogString("Проверка регистрации компьютера."); var loadSettingsRes = MainSettings.LoadMainSettingsFromSQL(); if (!loadSettingsRes.IsComplete) { LogString($"{loadSettingsRes.Message} - настройки не найдены."); MessageBox.Show($"{loadSettingsRes.Message} - настройки не найдены.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (MainSettings.MainSqlSettings == null || !MainSettings.MainSqlSettings.ComputerId.HasValue || MainSettings.MainSqlSettings.ComputerId.Value == 0) { LogString("Ошибка проверки регистрации компьютера. Не получен ComputerId."); MessageBox.Show("Ошибка проверки регистрации компьютера. Не получен ComputerId.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } LogString("Проверка регистрации компьютера успешно завершена."); } #endregion btnNextStep.Enabled = _isServiceInstallComplete; try { //Сохраняем главные настройки компьютера LogString("Сохранение главных настроек компьютера."); var formSqlMainSettings = new SqlMainSettings { ComputerId = MainSettings.MainSqlSettings.ComputerId, Is1CServer = cbIsServerLocated.Checked, IsMainCashbox = cbIsMainCashbox.Checked, ShopID = Convert.ToString(cbShopID.SelectedValue) }; SqlWorks.SaveMainSqlSettingsToBase(formSqlMainSettings); } catch (Exception ex) { LogString(ex); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } LogString("Настройки компьютера успешно сохранены."); try { //Сохраняем дополнительные настройки компьютера LogString("Сохранение дополнительных настроек компьютера."); var sqlLocalSettings = new SqlLocalSettings { Base1C = tbBase1C.Text, User1C = txtUser1C.Text, Pass1C = txtPass1C.Text, Version1C = txtVersion1C.Text, IsCheck1C = cbIsCheck1C.Checked, SelfUpdatePath = txtSelfUpdatePath.Text, OperationsListCheckTimeout = Convert.ToInt32(txtTimeOut.Text), SelfUpdateFtpServer = tbSelfUpdateFtpServer.Text, SelfUpdateFtpUser = tbSelfUpdateFtpUser.Text, SelfUpdateFtpPassword = tbSelfUpdateFtpPassword.Text, SelfUpdateFtpPath = tbSelfUpdateFtpPath.Text, Is1CBaseOnServer = _is1CBaseOnServer, Server1C = MainSettings.LocalSqlSettings?.Server1C, InformationBaseDirectory = MainSettings.LocalSqlSettings?.InformationBaseDirectory }; if (_is1CBaseOnServer) { sqlLocalSettings.Server1C = tbServerOrPath1C.Text; } else { sqlLocalSettings.InformationBaseDirectory = tbServerOrPath1C.Text; } var res = SqlWorks.SaveLocalSqlSettingsToBase(sqlLocalSettings); if (!res.IsComplete) { LogString(res.Message); MessageBox.Show(res.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch (Exception ex) { LogString(ex); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } LogString("Дополнительные настройки компьютера успешно сохранены."); LogString("Проверка настроек."); var loadSettingsresult = MainSettings.LoadSettings(); if (!loadSettingsresult.IsComplete) { LogString(loadSettingsresult.Message); MessageBox.Show(loadSettingsresult.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } LogString("Проверка настроек успешно завершена."); ActivateSettingsPage(tabInstallService); #endregion LogString("Помечаем магазин как открытый."); SqlWorks.ExecProc("SetShopToOpen", ConvertSafe.ToString(cbShopID.SelectedValue)); break; case Pages.InstallService: ActivateSettingsPage(tabControlTest); break; case Pages.ControlTest: this.Hide(); NLogger.LogDebugToHdd("MagicUpdater успешно установлен."); MessageBox.Show("MagicUpdater успешно установлен.", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); Application.Exit(); break; case Pages.End: break; } }