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.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.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();
// 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.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();
//**************************************************************************************
// 注册 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();
}
}
}