Ejemplo n.º 1
0
        // Конструктор
        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;
            }
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }
Ejemplo n.º 3
0
 // Обработчик события нажатия кнопки Запуск по требованию
 private void ForceRunButton_Click(object sender, EventArgs e)
 {
     AppHelper.CreateMessage("Выполнен запуск по требованию", MessageType.Information);
     TasksHelper.RunTasksThread();
 }