using System.Configuration; using System.Data; using System.IO; using System.Windows; using System.Windows.Media; using System.Windows.Threading; using BrilliantSightClient.Model.Exceptions; using log4net; using log4net.Config; using BrilliantSightClient.Model.Helper; using BrilliantSightClient.ViewModel.Configuration.SettingsPages; namespace BrilliantSightClient; /// /// Interaction logic for App.xaml /// public partial class App : Application { private static readonly ILog Logger = LogManager.GetLogger(typeof(App)); private static Mutex? _mutex = null; protected override void OnStartup(StartupEventArgs e) { const string appName = "BrilliantSight"; bool createdNew; _mutex = new Mutex(true, $"Global\\{{{appName}}}", out createdNew); if (!createdNew) { MessageBox.Show("An instance of this application is already running.", "BrilliantSight Is Running", MessageBoxButton.OK, MessageBoxImage.Warning); Shutdown(); return; } base.OnStartup(e); //加载日志配置文件 XmlConfigurator.Configure(new FileInfo("log4net.config")); Logger.Info("==== ==== ==== ==== ==== ==== ==== ===="); Logger.Info("App Client Start: App Initialize"); Logger.Info("Loaded Logs Config: log4net.config"); //运行是否需要归档 Log4NetHelper.ArchiveOldLogs(); Logger.Info("Check Logs need to be archived"); //打开数据库连接 //读取数据库多语言配置 DataBaseHelper.CreateConnection(); Logger.Info("Create Sqlite Connection..."); Logger.Info("Load Language Set"); string LanguageId = Settings.SelectValueById("LanguageId"); if (LanguageId.Length == 0) { LanguageId = "zh-cn"; } MultilingualHelper.setLanguage(LanguageId); Logger.Info($"Loaded Language is {LanguageId}"); string runMode = Settings.SelectValueById("RunMode"); Logger.Info($"Load RunMode Set {runMode}"); if (runMode.Length != 0 && int.TryParse(runMode, out int iRunMode)) { Common.RunMode = iRunMode; } else { Common.RunMode = 0; } Logger.Info($"Load RunMode is {Common.RunMode}"); Logger.Info("App Client Start: App Initialize Succeed !!!"); DispatcherUnhandledException += (s, ex) => { MessageBox.Show($"致命错误: {ex.Exception.Message}"); Logger.Error($"发生致命错误!!!{ex.Exception.Message}{ex.Exception.StackTrace}"); ex.Handled = true; }; Logger.Info("==== ==== ==== ==== ==== ==== ==== ===="); } protected override void OnExit(ExitEventArgs e) { _mutex?.ReleaseMutex(); base.OnExit(e); } }