Пример #1
0
        public static void Process(this Exception ex, ErrorHandlingLevels level, string extraMessage = null)
        {
            string innerExceptionMessage = "";

            if (ex.InnerException != null)
            {
                innerExceptionMessage = "INNER EXCEPTION" + Environment.NewLine + ex.InnerException.Message;
            }

            switch (level)
            {
            case ErrorHandlingLevels.Tray:
                string trayMessage = string.IsNullOrEmpty(extraMessage) ? ex.Message : extraMessage;
                AppTray.Message(ToolTipIcon.Error, trayMessage);
                break;

            case ErrorHandlingLevels.Modal:
                string modalMessage = "";

                if (!string.IsNullOrEmpty(extraMessage))
                {
                    modalMessage += extraMessage + Environment.NewLine + Environment.NewLine;
                }

                modalMessage += ex.Message;

                if (!string.IsNullOrEmpty(innerExceptionMessage))
                {
                    modalMessage += Environment.NewLine + Environment.NewLine + innerExceptionMessage;
                }

                System.Windows.MessageBox.Show(modalMessage, Settings.Title, MessageBoxButton.OK, MessageBoxImage.Exclamation);
                break;
            }

            lock (_locker)
            {
                string path       = Path.Combine(Settings.Directory, ERROR_FILE_NAME);
                string logMessage = DateTime.Now.ToString() + ": ";

                if (!string.IsNullOrEmpty(extraMessage))
                {
                    logMessage += extraMessage + Environment.NewLine + Environment.NewLine;
                }

                logMessage += ex.Message + Environment.NewLine + Environment.NewLine + ex.StackTrace;

                if (!string.IsNullOrEmpty(innerExceptionMessage))
                {
                    logMessage += Environment.NewLine + Environment.NewLine + innerExceptionMessage;
                }

                logMessage += Environment.NewLine + Environment.NewLine;

                File.AppendAllText(path, logMessage);
            }
        }
Пример #2
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            // =============================================================================
            // Первый этап: базовые проверки и настройки
            // =============================================================================

            // Вначале обязательно проверить, что из той же папки не запущен еще один экземпляр
            CheckSingleInstance(e.Args);

            // Проверим, что все базовые настройки в наличии
            bool?resultCheckSettings = CheckSettings();

            if (!resultCheckSettings.HasValue || !resultCheckSettings.Value)
            {
                Shutdown();

                // Программа завершается асинхронно, поэтому надо еще и выйти из метода
                return;
            }

            // Проверим, что все базовые настройки в наличии
            bool?resultCheckUser = CheckUser();

            if (!resultCheckUser.HasValue || !resultCheckUser.Value)
            {
                Shutdown();

                // Программа завершается асинхронно, поэтому надо еще и выйти из метода
                return;
            }

            // Сгенерируем новую пару публичного и приватного ключа, если требуется
            CheckKeys();

            // Поправки для перехода к новой версии
            CheckOldVersion();

            // =============================================================================
            // Второй этап: статические классы уровня приложения
            // =============================================================================

            // Инициализируем иконку в трее
            AppTray.Start();

            // Запускаем регулярную проверку обновлений
            AppUpdater.Start();

            // =============================================================================
            // Третий этап: главное окно приложения
            // =============================================================================

            // Главное окно
            new RosterView().Show();
        }
Пример #3
0
        public static void UpdateCheck(object updaterStateParam)
        {
            lock (_locker)
            {
                try
                {
                    // Костыль для RobotNet, который меняет текущую папку на себя
                    string oldDir = Directory.GetCurrentDirectory();
                    Directory.SetCurrentDirectory(Settings.Directory);

                    UpdateManager.Instance.CleanUp();
                    UpdateManager.Instance.CheckForUpdates();
                    if (UpdateManager.Instance.UpdatesAvailable > 0)
                    {
                        // Показать ли диалоговое окно сразу?
                        var updaterState = (UpdaterState)updaterStateParam;
                        if (!updaterState.IsDialog)
                        {
                            AppTray.Message(System.Windows.Forms.ToolTipIcon.Info,
                                            "A new update is available!" + Environment.NewLine +
                                            "Click to update.", Settings.TitleUpdate, UPDATE_BALLOON_TIMEOUT);
                        }
                        else
                        {
                            new UpdaterView().ShowDialog();
                        }
                    }

                    Directory.SetCurrentDirectory(oldDir);
                }
                catch (Exception ex)
                {
                    ex.Process(ErrorHandlingLevels.Silent);
                }
            }
        }