using JinYuan.ControlCenters; using JinYuan.Helper; using JinYuan.Models; using JinYuan.VirtualDataLibrary; using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace LargeSquareOne { internal static class Program { #region 调用系统API [DllImport("User32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); private const int SW_MAXIMIZE = 3; #endregion 调用系统API /// /// 应用程序的主入口点。 /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); string strname = Process.GetCurrentProcess().ProcessName; int a = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Count(); if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Count() > 1) { MessageBox.Show("软件已经启动,请在后台确认。"); Thread.Sleep(1000); Environment.Exit(0); return; } Process instance = GetRunningInstance(); if (instance == null) { AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); ClearMemoryHelper.ClearMemory(); ReadConfig(); try { //if (!CommonMethods.sysConfig.SwipeCardMode) { FrmLogin frm = new FrmLogin(); if (frm.ShowDialog() == DialogResult.OK) { Application.Run(new FrmMain()); } } } catch (Exception ex) { MessageBox.Show($"退出异常:{ex.Message}\n{ex.StackTrace}", "退出告警"); } } else { // 激活以前的实例 HandleRunningInstance(instance); } } /// /// 配置,数据库初始化 /// public static void ReadConfig() { //LogHelper.Instance.InitLog(Application.StartupPath + "\\Logs\\"); LogHelper.Instance.InitLog("D:\\APILog\\Logs\\"); // 读取 XML 文件 CommonMethods.Configxml = CommonMethods.ReadXmlConfig(CommonMethods.xmlFilePath); string MySlqconnString1 = ConfigurationManager.ConnectionStrings["mysql"].ToString();//本地 string MySlqconnString2 = ConfigurationManager.ConnectionStrings["mysql2"].ToString();//远端 string strDBType = ConfigurationManager.AppSettings["DefaultDb"].ToString(); var connDbType = (SqlSugar.DbType)Enum.Parse(typeof(SqlSugar.DbType), strDBType); CommonMethods.db.SetConnectionStr(MySlqconnString1, SqlSugar.DbType.MySql); CommonMethods.dbServer.SetConnectionStr(MySlqconnString2, SqlSugar.DbType.MySql); CommonMethods.sysConfig.SwipeCardMode = Convert.ToBoolean(CommonMethods.GetConfigValue(CommonMethods.Configxml, "CONFIG_INFO", "EnableCardMode", "false"));//开启刷卡模式? } /// /// 当某个异常未被捕获时出现,回调方法 /// /// /// private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { try { Exception ex = (Exception)e.ExceptionObject; LogHelper.Instance.WriteEX(ex); MessageBox.Show($"程序出现大异常,请联系 【金源自动化软件设计部】。\r\n异常信息: {ex.Message}\r\n异常堆栈:{ex.StackTrace}", "致命错误", MessageBoxButtons.OK, MessageBoxIcon.Stop); } finally { Application.Exit(); } } /// /// 返回正在运行的程序进程 /// /// public static Process GetRunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(current.ProcessName); foreach (Process process in processes) { if (process.Id != current.Id) if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName) return process; } return null; } /// /// 已经有了就把它激活,并将其窗口放置最前端 /// /// public static void HandleRunningInstance(Process instance) { ShowWindowAsync(instance.MainWindowHandle, SW_MAXIMIZE); SetForegroundWindow(instance.MainWindowHandle); } } }