using AutoMapper; using CapMachine.Core; using CapMachine.Core.IService; using CapMachine.Wpf.MapperProfile; using CapMachine.Wpf.Models; using CapMachine.Wpf.Services; using CapMachine.Wpf.SoftAuthorizeCore; using CapMachine.Wpf.ViewModels; using CapMachine.Wpf.Views; using FreeSql; using FreeSql.Internal; using Hardcodet.Wpf.TaskbarNotification; using Prism.DryIoc; using Prism.Ioc; using Prism.Regions; using System.Globalization; using System.Text; using System.Threading; using System.Windows; using System.Windows.Threading; namespace CapMachine.Wpf { /// /// Interaction logic for App.xaml /// public partial class App : PrismApplication { private TaskbarIcon taskBar; /// /// 日志服务 /// private ILogService LogService { get; set; } private static System.Threading.Mutex mutex; private SoftAuthorizeHelper SoftAuthorizeHelper { get; set; } = SoftAuthorizeHelper.GetInstance(); public App() { try { //24.2.7 //Syncfusion.SfSkinManager.SfSkinManager.ApplyStylesOnApplication = true; Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MzEyMzM3NkAzMjM0MmUzMDJlMzBHdjVKNUNpNWZxYXQwR05ZbVYvUEtzbGxXMnVxRjYvRGtLSlZUOGpjQW44PQ=="); //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN"); // 授权 a717c797-59e3-48de-b6b4-574a4e03dc79 if (!HslCommunication.Authorization.SetAuthorizationCode("b23b00e2-ce46-4bfc-b33c-71c47c2c11c2")) { //active failed MessageBox.Show("授权失败!当前程序只能使用8小时!"); //return; } else { //IsActive = true; } //SfSkinManager.ApplyStylesOnApplication = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } } protected override void OnStartup(StartupEventArgs e) { //首先注册开始和退出事件 this.Startup += new StartupEventHandler(App_Startup); this.Exit += new ExitEventHandler(App_Exit); mutex = new System.Threading.Mutex(true, "OnlyRun_CRNS"); if (mutex.WaitOne(0, false)) { base.OnStartup(e); } else { MessageBox.Show("程序已经在运行!", "提示"); this.Shutdown(); } //验证文档 try { var MachineCode = SoftAuthorizeHelper.GetMachineCode(); SoftAuthorizeHelper.WriteMachineCodeToFile(MachineCode, ""); var PublicKey = SoftAuthorizeHelper.GetPublicKeyDataByFilePath(""); var Lience = SoftAuthorizeHelper.GetLienceDataByFilePath(""); var IsOK = SoftAuthorizeHelper.CheckLience(MachineCode, PublicKey, Lience); if (!IsOK) { LogService.Error("授权失败"); //this.Shutdown(); } } catch (Exception ex) { throw; } //base.OnStartup(e); } protected override Window CreateShell() => null; protected override void RegisterTypes(IContainerRegistry containerRegistry) { ////注册日志服务 containerRegistry.RegisterSingleton(); //注册AutoMapper 将IAutoMapperProvider注入IOC容器,并对外提供IMapper注入类型。 containerRegistry.RegisterSingleton(); containerRegistry.Register(typeof(IMapper), GetMapper); //注册基础的服务 //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(); string strsqllite = System.AppDomain.CurrentDomain.BaseDirectory + @"Db\CapMachine.db"; string strslocaldb = System.AppDomain.CurrentDomain.BaseDirectory + @"Db\CapMachineDb"; //string assemblyPath = Assembly.GetExecutingAssembly().Location; var Con = ConfigHelper.GetValue("connecting5").Replace("@Address@", strsqllite); var LocalDb = @"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=@Address@.mdf;Integrated Security=True;Connect Timeout=30;"; var LocalDbStr = LocalDb.Replace("@Address@", strslocaldb); var LocalDbDir = @"Data Source=(localdb)\MSSQLLocalDB;Integrated Security=True;Connect Timeout=30;"; //var LocalDbFath= @"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=@Address@.mdf;Integrated Security=True;Connect Timeout=30;".Replace("@Address@", ConfigHelper.GetValue("LocalDBPath")); var Constr = ConfigHelper.GetValue("connecting"); //注册IFreeSql实例 单例 containerRegistry.RegisterSingleton(() => { IFreeSql Fsql = new FreeSqlBuilder() //.UseConnectionString(DataType.SqlServer, "Data Source=CT-PC;user instance=false;Initial Catalog=KylinEMS;Encrypt=True;TrustServerCertificate=True;User ID=sa;Password=12345678") //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=CT-PC;user instance=false;Initial Catalog=CapMachine;Encrypt=True;TrustServerCertificate=True;User ID=sa;Password=12345678") .UseConnectionString(FreeSql.DataType.SqlServer, Constr) //.UseConnectionString(FreeSql.DataType.SqlServer, LocalDbDir) //.UseConnectionString(FreeSql.DataType.Sqlite, Con) .UseAutoSyncStructure(true) .Build(); return Fsql; }); containerRegistry.RegisterSingleton(); 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(); //注册Dialog视图时绑定VM 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(); //注册AutoMapper //containerRegistry.RegisterSingleton(); //containerRegistry.Register(typeof(IMapper), GetMapper); } //private IMapper GetMapper(IContainerProvider container) //{ // var provider = container.Resolve(); // return provider.GetMapper(); //} /// /// 将IAutoMapperProvider注入IOC容器,并对外提供IMapper注入类型。 /// /// /// private IMapper GetMapper(IContainerProvider container) { var provider = container.Resolve(); return provider.GetMapper(); } /// /// 系统初始化 /// protected override void OnInitialized() { //初始加载资源的窗口 *******起始弹窗******** //var appStart = ContainerLocator.Container.Resolve(); //appStart.CreateShell(); //#region 初版 //Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-CN"); //从容器中获取MainView的实例对象 var container = ContainerLocator.Container; var shell = container.Resolve("MainView"); //加载种子数据 var SeekData = new SeekData(container.Resolve()); if (shell is Window view) { //更新Prism注册区域信息 var regionManager = container.Resolve(); RegionManager.SetRegionManager(view, regionManager); RegionManager.UpdateRegions(); //给MainView的MainViewFooterContentRegion区域设置FooterView具体的信息 regionManager.RequestNavigate("MainViewFooterContentRegion", nameof(FooterView)); regionManager.RequestNavigate("MainViewContentRegion", nameof(MonitorView)); //调用首页的INavigationAware 接口做一个初始化操作 if (view.DataContext is INavigationAware navigationAware) { navigationAware.OnNavigatedTo(null); //呈现首页 App.Current.MainWindow = view; } } //先加载服务,防止在ViewModel中使用时速度慢 var appVersionService = ContainerLocator.Container.Resolve(); var appVersionService2 = ContainerLocator.Container.Resolve(); var appVersionService12 = ContainerLocator.Container.Resolve(); var appVersionService3 = ContainerLocator.Container.Resolve(); var appVersionService4 = ContainerLocator.Container.Resolve(); var appVersionService5 = ContainerLocator.Container.Resolve(); var appVersionService6 = ContainerLocator.Container.Resolve(); var appVersionService7 = ContainerLocator.Container.Resolve(); var appVersionService8 = ContainerLocator.Container.Resolve(); var appVersionService9 = ContainerLocator.Container.Resolve(); var appVersionService10 = ContainerLocator.Container.Resolve(); //var appVersionService11 = ContainerLocator.Container.Resolve(); var appVersionService15 = ContainerLocator.Container.Resolve(); var appVersionService16 = ContainerLocator.Container.Resolve(); //给当前的全局异常捕捉服务使用 LogService = ContainerLocator.Container.Resolve(); LogService.Error("Start-->OnInitialized"); base.OnInitialized(); //#endregion //*******起始弹窗 * ******* //LogService = ContainerLocator.Container.Resolve(); //LogService.Error("Start-->"); //base.OnInitialized(); } #region 全局异常捕捉 void App_Startup(object sender, StartupEventArgs e) { //UI线程未捕获异常处理事件 (UI主线程) this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException); //Task线程内未捕获异常处理事件 TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; //非UI线程未捕获异常处理事件 (例如自己创建的一个子线程) AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); } void App_Exit(object sender, ExitEventArgs e) { //程序退出时需要处理的业务 LogService.Error($"程序退出:{e.ToString()}"); } /// /// UI线程未捕获异常处理事件(UI主线程) /// /// /// void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { //此时程序出现严重异常,将强制结束退出 try { HandleException(e.Exception); //MessageBox.Show("UI线程异常:" + e.Exception.Message); LogService.Error("UI线程异常:" + e.Exception.Message); } catch (Exception ex) { HandleException(ex); //MessageBox.Show("UI线程发生致命错误!"); LogService.Error("UI线程发生致命错误!"); } finally { e.Handled = true; } } /// /// 非UI线程未捕获异常处理事件(例如自己创建的一个子线程) /// /// /// void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { try { var exception = e.ExceptionObject as Exception; if (exception != null) { HandleException(exception); StringBuilder sbEx = new StringBuilder(); if (e.IsTerminating) { sbEx.Append("非UI线程发生致命错误"); } sbEx.Append("非UI线程异常:"); if (e.ExceptionObject is Exception) { sbEx.Append(((Exception)e.ExceptionObject).Message); } else { sbEx.Append(e.ExceptionObject); } LogService.Error(sbEx.ToString()); //MessageBox.Show(sbEx.ToString()); } } catch (Exception ex) { LogService.Error(ex.ToString()); HandleException(ex); } finally { //ignore } } /// /// Task线程内未捕获异常处理事件 /// /// /// void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) { try { var exception = e.Exception as Exception; if (exception != null) { HandleException(exception); //task线程内未处理捕获 LogService.Error($"Task线程异常" + e.Exception.Message); //MessageBox.Show("Task线程异常:" + e.Exception.Message); } } catch (Exception ex) { HandleException(ex); } finally { //设置该异常已察觉(这样处理后就不会引起程序崩溃) e.SetObserved(); } } /// /// 公共的日志记录方法 /// /// private void HandleException(Exception ex) { //记录日志 LogService.Error(ex.ToString()); } #endregion ///// ///// *******起始弹窗******** ///// //public void Initialization() //{ // taskBar = (TaskbarIcon)FindResource("taskBar"); //} ///// ///// *******起始弹窗******** ///// //public void Dispose() //{ // taskBar?.Dispose(); //} } }