private void GetOperations() { OperationList.Clear(); DataSet ds = null; if (!EnableOnlyRestartOperationMode) { // Берем все оперции за исключением RestartMagicUpdater_Service (1003) т.к. она нужна для // перезапуска MagicUpdater'a и должна выполняться в отдельном потоке. ds = SqlWorks.ExecProc("SelectOperationsList", MainSettings.MainSqlSettings.ComputerId); } else { // Берем только операцию RestartMagicUpdater_Service (1003) ds = SqlWorks.ExecProc("SelectRestartOperation", MainSettings.MainSqlSettings.ComputerId); } if (ds != null) { foreach (DataRow dr in ds.Tables[0].Rows) { int id = Convert.ToInt32(dr["ID"]); if (!SetOperationReaded(id)) { NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, $"Ошибка чтения операции. ID: {id}"); continue; } string attrsJson = Convert.ToString(dr["Attributes"]); var operationSqlDto = GetOperationName(Convert.ToInt32(dr["OperationType"])); string ot = operationSqlDto.Name; string fileName = operationSqlDto.FileName; string fileMD5 = operationSqlDto.FileMD5; Type t = null; //Если имя файла не пустое - это плагин операция (dll) if (string.IsNullOrEmpty(fileName)) { t = Type.GetType($"MagicUpdater.Operations.{ot}"); } else { t = PluginOperationAdapter.GetPluginOperationType(ot, fileName, fileMD5); } if (t != null) { try { Operation operation; if (t.GetConstructors()[0].GetParameters().Length == 2) { operation = (Operation)Activator.CreateInstance(t, id, attrsJson); } else { operation = (Operation)Activator.CreateInstance(t, id); } OperationList.Add(operation); } catch (Exception ex) { NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, $"Возможная причина. Несовпадение сигнатур операций БД и Шарпа. Original: {ex.Message.ToString()}"); } } else { NLogger.SetReportForOperation(id, false, "Не удалось найти тип операции"); } } } }