// Конструктор public MainForm() { InitializeComponent(); GUIController.Init(this); AppHelper.CreateMessage("Инициализация конфигурации приложения...", MessageType.Information, false, false, true); if (!AppHelper.InitConfiguration()) { GUIController.ExitOnLoaded(); return; } AppHelper.CreateMessage("Инициализация основных параметров...", MessageType.Information, false, false, true); if (!AppHelper.InitEngine()) { GUIController.ExitOnLoaded(); return; } AppHelper.MainTimer.Tick += delegate(object s, EventArgs e) { TasksHelper.RunTasksThread(); }; AppHelper.CreateMessage("Запуск планировщика...", MessageType.Information, false, false, true); AppHelper.MainTimer.Start(); AppHelper.CreateMessage("Инициализация проверки связи...", MessageType.Information, false, false, true); if (!InitPinger()) { return; } }
/// <summary> /// Инициализация движка программы /// </summary> /// <returns></returns> public static bool InitEngine() { try { if (!SecurityHelper.CheckCertificateExists(StoreName.Root, StoreLocation.CurrentUser, Configuration.Mail.CertificateName)) { CreateMessage("Сертификат почтового сервера не установлен. Необходимо выполнить установку сертификата и повторно запустить программу", MessageType.Error, true, false, true); return(false); } // Инициализация параметров электронной почты MailHelper.Host = Configuration.Mail.Host; MailHelper.Domain = Configuration.Mail.Domain; MailHelper.ToRecipient = Configuration.Mail.ToRecipient; MailHelper.Username = Configuration.Mail.Username; MailHelper.Password = Configuration.Mail.Password; // Инициализация параметров ftp сервера FtpHelper.Host = Configuration.Ftp.Host; FtpHelper.Port = Configuration.Ftp.Port; FtpHelper.Cwd = Configuration.Ftp.Cwd; FtpHelper.Username = Configuration.Ftp.Username; FtpHelper.Password = Configuration.Ftp.Password; // Инициализация параметров SQL if (!IOHelper.IsFullPath(Configuration.Sql.Database)) { Configuration.Sql.Database = Path.Combine(CurrentDirectory, Configuration.Sql.Database); } SQLHelper.ConnectionString = string.Format("User={0};Password={1};Database={2};DataSource={3};Pooling=false;Connection lifetime=60;Charset=WIN1251;", Configuration.Sql.Username, Configuration.Sql.Password, Configuration.Sql.Database, Configuration.Sql.DataSource); // Проверка временных папок на их существование TempPath = Path.Combine(CurrentDirectory, "Temp"); if (!Directory.Exists(TempPath)) { Directory.CreateDirectory(TempPath); } TempTasksPath = Path.Combine(TempPath, "Tasks"); if (!Directory.Exists(TempTasksPath)) { Directory.CreateDirectory(TempTasksPath); } TempFtpPath = Path.Combine(TempPath, "Ftp"); if (!Directory.Exists(TempFtpPath)) { Directory.CreateDirectory(TempFtpPath); } TempSqlPath = Path.Combine(TempPath, "Sql"); if (!Directory.Exists(TempSqlPath)) { Directory.CreateDirectory(TempSqlPath); } // Проверка задач по обработке файлов CreateMessage("Загрузка задач...", MessageType.Information, false, false, true); StringBuilder errors = new StringBuilder(); foreach (Task task in Configuration.Tasks) { task.Name = task.Name.ToUpper(); task.Source = Environment.ExpandEnvironmentVariables(task.Source); if (!string.IsNullOrWhiteSpace(task.ExternalLib)) { task.ExternalLibAsm = Assembly.LoadFile(Path.Combine(CurrentDirectory, Environment.ExpandEnvironmentVariables(task.ExternalLib))); } if (!task.AllowDuplicate) { try { SQLHelper.CreateTableFingerprint(task.Name); } catch (Exception ex) { errors.AppendLine(string.Format("Ошибка: {0}", ex.ToString())); } } try { IOHelper.IsPathDirectory(task.Source); } catch (Exception ex) { if (ex is FileNotFoundException || ex is DirectoryNotFoundException) { errors.AppendLine(string.Format("Путь '{0}' для задачи '{1}' не существует", task.Source, task.Name)); continue; } throw; } } if (errors.Length > 0) { CreateMessage("Ошибка при инициализации задач:\r\n" + errors.ToString(), MessageType.Error, false, true, true); } try { // Проверка существования таблицы для хранения данных об обработанных файлах SQLHelper.CreateTableOperationInfo(); } catch (Exception ex) { CreateMessage("Ошибка при инициализации программы:\r\n" + ex.ToString(), MessageType.Error, false, true, true); } // Настройка главного таймера int interval = Configuration.TaskInterval; MainTimer = new Timer(); MainTimer.Interval = Math.Max(MinimumMainTimerInterval, interval); // Настройка таймера обновлений UpdateTimer = new System.Threading.Timer((s) => CheckUpdates(), null, 0, Math.Max(MinimumUpdateTimerInterval, Configuration.CheckUpdateInterval)); CreateMessage("Инициализация и запуск именованного канала...", MessageType.Information, false, false, true); NamedPipeListener <string> namedPipeListener = new NamedPipeListener <string>(ProductName); namedPipeListener.MessageReceived += delegate(object sender, NamedPipeListenerMessageReceivedEventArgs <string> e) { switch (e.Message) { case "force": TasksHelper.RunTasksThread(); break; default: break; } }; namedPipeListener.Error += delegate(object sender, NamedPipeListenerErrorEventArgs e) { CreateMessage(string.Format("Ошибка Pipe: ({0}): {1}", e.ErrorType, e.Exception.Message), MessageType.Error, false, false, true); }; namedPipeListener.Start(); new System.Threading.Timer(delegate(object state) { if (!UpdatesHelper.VersionSended) { CreateMessage("Отправка информации о текущей версии программы на сервер обновлений...", MessageType.Information, false, false, true); System.Threading.Thread thread = new System.Threading.Thread(delegate() { try { string errorString; if (!UpdatesHelper.SendVersionInformation(Configuration.Updates.ServerName, Configuration.ZipCode, ProductName, Version, out errorString)) { throw new Exception(errorString); } UpdatesHelper.VersionSended = true; } catch (Exception ex) { UpdatesHelper.VersionSended = false; CreateMessage("Ошибка при отправке информации о текущей версии программы:\r\n" + ex.ToString(), MessageType.Error, false, false, true); } }); thread.Start(); } }, null, 0, Math.Max(MinimumUpdateTimerInterval, Configuration.CheckUpdateInterval)); return(true); } catch (Exception ex) { CreateMessage("Ошибка инициализации программы:\r\n" + ex.ToString(), MessageType.Error, true, true, true); return(false); } }
// Обработчик события нажатия кнопки Запуск по требованию private void ForceRunButton_Click(object sender, EventArgs e) { AppHelper.CreateMessage("Выполнен запуск по требованию", MessageType.Information); TasksHelper.RunTasksThread(); }