| | |
| | | using HMI.Core.Util; |
| | | using HMI.Core.Setting; |
| | | using HMI.Core.Util; |
| | | using HMI.UI.Util; |
| | | using log4net; |
| | | using Microsoft.Win32; |
| | | using Panuon.WPF.UI; |
| | | using System; |
| | | using System.Diagnostics; |
| | | using System.IO; |
| | | using System.Management; |
| | | using System.Reflection; |
| | | using System.Threading; |
| | | using System.Windows; |
| | | using WPFProject.Utils; |
| | | |
| | |
| | | public partial class App : Application |
| | | { |
| | | private ILog log; |
| | | private LogCleanner logCleanner; |
| | | public App() |
| | | { |
| | | log = LogManager.GetLogger("APP"); |
| | |
| | | { |
| | | var ex = e.ExceptionObject as Exception; |
| | | log.Error("UnhandledException.", ex); |
| | | MsgBoxHelper.ErrorMessage(Current.MainWindow, this.lang("App.AppUnhandledException",ex.Message), |
| | | MsgBoxHelper.ErrorMessage(Current.MainWindow, this.lang("App.AppUnhandledException", ex.Message), |
| | | this.lang("App.Error"), MessageBoxButton.OK, |
| | | MessageBoxIcon.Error, DefaultButton.YesOK, 5); |
| | | } |
| | | |
| | | public static Process GetProcess() |
| | | { |
| | | Process cur = Process.GetCurrentProcess(); |
| | | string exePath = Assembly.GetExecutingAssembly().Location; |
| | | string query = $"SELECT ProcessId FROM Win32_Process WHERE ExecutablePath = '{exePath.Replace("\\", "\\\\")}'"; |
| | | using (var searcher = new ManagementObjectSearcher(query)) |
| | | { |
| | | foreach (var obj in searcher.Get()) |
| | | { |
| | | int processId = Convert.ToInt32(obj["ProcessId"]); |
| | | if (processId != cur.Id) |
| | | { |
| | | return Process.GetProcessById(processId); |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 启动后往注册表写点东西 |
| | | /// </summary> |
| | | private void WriteRegister() |
| | | { |
| | | string Company = "JingCe", Program = "HMI"; |
| | | try |
| | | { |
| | | string registryPath = @$"SOFTWARE\{Company}\{Program}"; |
| | | |
| | | using RegistryKey key = Registry.CurrentUser.CreateSubKey(registryPath, true) |
| | | ?? throw new Exception("无法创建或打开注册表键"); |
| | | string path = AppDomain.CurrentDomain.BaseDirectory; |
| | | key.SetValue("Location", path, RegistryValueKind.String); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | log.Error("Write Register Failed.", ex); |
| | | } |
| | | } |
| | | |
| | | private void DoUpdateAction() |
| | | { |
| | | using (SqliteHelper helper = new SqliteHelper(PathHelper.DatabasePath)) |
| | | { |
| | | if (!helper.HasData("SELECT 1 FROM pragma_table_info('user') WHERE name = 'code';")) |
| | | { |
| | | helper.ExecuteSql("ALTER TABLE user ADD code TEXT;"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private static Mutex mutex; |
| | | private void Application_Startup(object sender, StartupEventArgs e) |
| | | { |
| | | LangUtil.Load(); |
| | | ToastHelper.Register(new MainToastHandler()); |
| | | LoadingWindow window = new LoadingWindow(); |
| | | //Login window = new Login(); |
| | | window.Show(); |
| | | var process = GetProcess(); |
| | | |
| | | mutex = new Mutex(true, "TestPlatform_OnlyRun_CRNS__"); |
| | | if (mutex.WaitOne(0, false))//&& process == null |
| | | { |
| | | WriteRegister(); |
| | | try |
| | | { |
| | | DoUpdateAction(); |
| | | } |
| | | catch (Exception ex) { |
| | | log.Error("Update Failed.", ex); |
| | | } |
| | | |
| | | logCleanner = new LogCleanner(); |
| | | AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; |
| | | LoggerHelper.Register(new CommonLogger()); |
| | | LangUtil.Load(); |
| | | SystemSetting.SystemSettingChanged += SystemSetting_SystemSettingChanged; |
| | | ToastHelper.Register(new MainToastHandler()); |
| | | //LoadingWindow window = new LoadingWindow(); |
| | | Login window = new Login(); |
| | | window.Show(); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("程序已经在运行!", "提示"); |
| | | this.Shutdown(); |
| | | } |
| | | } |
| | | |
| | | private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) |
| | | { |
| | | // 获取请求加载的程序集名称 |
| | | string assemblyName = new AssemblyName(args.Name).Name; |
| | | |
| | | string[] dirs = new string[] { "3rds", "Libs" }; |
| | | |
| | | foreach (string dir in dirs) |
| | | { |
| | | string dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, dir, $"{assemblyName}.dll"); |
| | | if (File.Exists(dllPath)) |
| | | { |
| | | // 如果依赖 DLL 存在,则加载并返回它 |
| | | return Assembly.LoadFrom(dllPath); |
| | | } |
| | | } |
| | | // 否则返回 null |
| | | return null; |
| | | } |
| | | |
| | | private void SystemSetting_SystemSettingChanged(object sender, SystemSetting e) |
| | | { |
| | | LangUtil.LoadLang(); |
| | | } |
| | | } |
| | | } |