//Тут используется "TryPluginOperation" на случай если эта процедура понадобиться как Public //Внутри этого класса проверка по "TryPluginOperation" отсутствует public static TryPluginOperation GetFromDll(string FullPath) { Assembly pluginAssembly = Assembly.Load(File.ReadAllBytes(FullPath)); IEnumerable <Type> operationPlugin = pluginAssembly.GetTypes().OfType <Type>().Where(w => w.IsPublic && !w.IsAbstract && (w.GetInterface("MagicUpdaterCommon.Abstract.IOperation", true) != null)); IEnumerable <Type> attributesPlugin = pluginAssembly.GetTypes().OfType <Type>().Where(w => w.IsPublic && !w.IsAbstract && (w.GetInterface("MagicUpdaterCommon.Abstract.IOperationAttributes", true) != null)); IEnumerable <Type> registrationParams = pluginAssembly.GetTypes().OfType <Type>().Where(w => w.IsPublic && !w.IsAbstract && (w.GetInterface("MagicUpdaterCommon.Abstract.IRegistrationParams", true) != null)); //Операция if (operationPlugin.Count() == 1) { Type operationPluginType = operationPlugin.First(); Dictionary <string, string> registrationParamsDictionary = new Dictionary <string, string>(); //Параметры для SQL if (registrationParams.Count() > 1) { return(new TryPluginOperation(null, false, $"Неверный формат параметров SQL библиотеки подключаемой операции {FullPath}. Интерфейс \"IRegistrationParams\" в количестве более одного.")); } else if (registrationParams.Count() == 1) { Type registrationParamsType = registrationParams.First(); var registrationParamsInstance = Activator.CreateInstance(registrationParamsType); foreach (PropertyInfo pi in registrationParamsType.GetProperties()) { registrationParamsDictionary.Add(pi.Name, ConvertSafe.ToString(pi.GetValue(registrationParamsInstance, null))); } } //Атрибуты Type attributesPluginType = null; if (attributesPlugin.Count() == 1) { attributesPluginType = attributesPlugin.First(); } else if (attributesPlugin.Count() > 1) { return(new TryPluginOperation(null, false, $"Неверный формат атрибутов библиотеки подключаемой операции {FullPath}. Интерфейс \"IOperationAttributes\" отсутствует или их более одного.")); } return(new TryPluginOperation( new PluginOperation(operationPluginType.ToString() , operationPluginType.Name , attributesPluginType?.ToString() , FullPath , registrationParamsDictionary ))); } else { return(new TryPluginOperation(null, false, $"Неверный формат библиотеки подключаемой операции {FullPath}. Интерфейс \"IOperation\" отсутствует или их более одного.")); } }
private static object GetFieldValue(DataTable data, string FieldName) { var type = data._FindValue("FieldType", "FieldName", FieldName); if (type == "string") { return(ConvertSafe.ToString(data._FindValue("FieldValue", "FieldName", FieldName))); } if (type == "double") { return(Convert.ToDouble((data._FindValue("FieldValue", "FieldName", FieldName)))); } return(null); }
public TryLoadSettingsFromSql LoadSqlMainSettingsFromSQL() { DataSet ds = null; ds = SqlWorks.ExecProcExt(MainSettings.JsonSettings.ConnectionString, "GetComputerSettingsViaMac", HardwareInfo.GetMacAddress()); if (ds != null) { ComputerId = ConvertSafe.ToInt32(ds.Tables[0].Rows[0]["ComputerId"]); ShopID = ConvertSafe.ToString(ds.Tables[0].Rows[0]["ShopId"]); Is1CServer = ConvertSafe.ToBoolean(ds.Tables[0].Rows[0]["Is1CServer"]); IsMainCashbox = ConvertSafe.ToBoolean(ds.Tables[0].Rows[0]["IsMainCashbox"]); return(new TryLoadSettingsFromSql()); } else { ComputerId = 0; ShopID = string.Empty; Is1CServer = false; IsMainCashbox = false; return(new TryLoadSettingsFromSql(false, "Компьтер не зарегистрирован.")); } }
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; } }