//Тут используется "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\" отсутствует или их более одного."));
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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, "Компьтер не зарегистрирован."));
            }
        }
示例#4
0
        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;
            }
        }