using Prism.Ioc; using Prism.Modularity; using Prism.Services.Dialogs; using Prism.Unity; using SqlSugar; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web.UI.WebControls; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Media3D; using Team.FFFeederService; using Team.FFFeederService.Interfaces; using Team.Utility; using TeamAAS_VP; using TeamAAS_VP.Controls; using TeamAAS_VP.Core; using TeamAAS_VP.Core.ScrewDriver; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Properties; using TeamAAS_VP.Resources.Languages; using TeamAAS_VP.Services; using TeamAAS_VP.ViewModels; using TeamAAS_VP.ViewModels.Calibration; using TeamAAS_VP.ViewModels.DebugMod; using TeamAAS_VP.ViewModels.Home; using TeamAAS_VP.ViewModels.Product; using TeamAAS_VP.ViewModels.User; using TeamAAS_VP.Views; using TeamAAS_VP.Views.Calibration; using TeamAAS_VP.Views.DebugMod; using TeamAAS_VP.Views.Home; using TeamAAS_VP.Views.Product; using TeamAAS_VP.Views.Setting; using TeamAAS_VP.Views.User; using WPFLocalizeExtension.Engine; [assembly: log4net.Config.XmlConfigurator(ConfigFile = "App.config", ConfigFileExtension = "config", Watch = true)] namespace TeamAAS_VP { /// /// App.xaml 的交互逻辑 /// public partial class App : PrismApplication { private static System.Threading.Mutex mutex; protected override Window CreateShell() { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var mainWindow = this.Container.Resolve(); var _configService = this.Container.Resolve(); var _databaseInitializer = this.Container.Resolve(); // 1. 读取配置参数 _configService.LoadAll(); try { _databaseInitializer.InitializeDatabase(); } catch (Exception ex) { LogHelper.WriteLogError("Database initialization failed during application startup", ex); } // 设置语言 var currentlanguage = _configService.GetSystemConfiguration().CurrentLanguage; _configService.SetCurrentLanguage(currentlanguage); var cardLogin = this.Container.Resolve(); var result = cardLogin.ShowDialog(); if (result is bool st1 && !st1) { this.Shutdown(); } return mainWindow; } protected override void RegisterTypes(IContainerRegistry containerRegistry) { //------------------------注册导航视图------------------------------------------------ containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); //产品 containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); //校准 containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); //************************************************************************************** //------------------------注册单类------------------------------------------------ containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); // Register system database service and initializer containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); //containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); //产品 containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); //校准 containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); //************************************************************************************** //------------------------注册对话框------------------------------------------------ containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); //************************************************************************************** // 注册 SQLSugar 客户端(单例模式) containerRegistry.RegisterSingleton(s => { // 规范化数据库路径(使用绝对路径和平台分隔符) string relative = Path.Combine("..", "Database File", "System.db"); string fullDbPath = Path.GetFullPath(relative); // 变为绝对路径 Directory.CreateDirectory(Path.GetDirectoryName(fullDbPath)); // 确保目录存在 string connectionString = $"Data Source={fullDbPath};Version=3;"; //Scoped用SqlSugarClient SqlSugarClient sqlSugar = new SqlSugarClient(new ConnectionConfig() { DbType = SqlSugar.DbType.Sqlite, ConnectionString = connectionString, IsAutoCloseConnection = false, InitKeyType = InitKeyType.Attribute // 初始化主键和自增列信息的方式 }, db => { db.Aop.OnLogExecuting = (sql, pars) => { }; }); return sqlSugar; }); } protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog) { base.ConfigureModuleCatalog(moduleCatalog); } protected override void OnStartup(StartupEventArgs e) { OpenCvSharp.Cv2.GetVersionString(); var currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += UnhandledExceptionOccured; // 在异常由应用程序引发但未进行处理时发生。主要指的是UI线程。 this.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException); mutex = new System.Threading.Mutex(true, "Team-AAS-VM"); if (mutex.WaitOne(0, false)) { //var softKey = new SoftKey(); //var ret = softKey.CheckKeyByReadEprom(); //if (ret == 0) //{ // LogHelper.WriteLogInfo(Lang.AASLicense正常使用); //} //else //{ // LogHelper.WriteLogInfo(Lang.未检测到正确的AASlicenseusb); // MessageBox.Show(Lang.未检测到正确的AASlicenseusb, "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk); // this.Shutdown(); // return; //} if (Cognex.VisionPro.CogMisc.GetLicensedFeatures(true).Count <= 0) { LogHelper.WriteLogInfo(Lang.未检测到正确的VisionProlicense); MessageBox.Show(Lang.未检测到正确的VisionProlicense, "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk); this.Shutdown(); return; } var culture = new CultureInfo("zh-CN"); App.Current.Dispatcher.Thread.CurrentCulture = culture; App.Current.Dispatcher.Thread.CurrentUICulture = culture; LocalizeDictionary.Instance.Culture = culture; base.OnStartup(e); LogHelper.WriteLogInfo("<<<=====================Team-AAS-VM Startup====================="); try { if (!RegeditHelper.IsFirstUse()) { RegeditHelper.WriteFirstLog(); } RegeditHelper.WriteAppVersion(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()); } catch (Exception ex) { LogHelper.WriteLogError(Lang.操作注册表时出错, ex); } } else { MessageBox.Show(Lang.程序已经在运行, "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk); this.Shutdown(); } } protected override void OnExit(ExitEventArgs e) { LogHelper.WriteLogInfo("=====================Team-AAS-VM End=====================>>>"); base.OnExit(e); } void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { //可以记录日志并转向错误bug窗口友好提示用户 e.Handled = true; LogHelper.WriteLogFatal("Application has crashed", e.Exception); MessageBox.Show("Error:" + e.Exception.Message + " " + e.Exception.StackTrace, "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk); } private static void UnhandledExceptionOccured(object sender, UnhandledExceptionEventArgs args) { //全局异常记录 var e = (Exception)args.ExceptionObject; LogHelper.WriteLogFatal("Application has crashed", e); MessageBox.Show($"Error: something went wrong and the application must close:{e.ToString()} ", "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk); } protected override void OnInitialized() { base.OnInitialized(); } } }