Files

152 lines
5.4 KiB
C#
Raw Permalink Normal View History

2026-09-07 08:07:08 +08:00
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
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[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());
}
}
else
{
Application.Run(new FrmMain());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
{
// 激活以前的实例
HandleRunningInstance(instance);
}
}
/// <summary>
/// 配置,数据库初始化
/// </summary>
public static void ReadConfig()
{
LogHelper.Instance.InitLog(@"D:\Logs\");//Application.StartupPath + "\\Logs\\"
// 读取 XML 文件
CommonMethods.Configxml = CommonMethods.ReadXmlConfig(CommonMethods.xmlFilePath);
string MySlqconnString1 = ConfigurationManager.ConnectionStrings[2].ToString();//本地
string MySlqconnString2 = ConfigurationManager.ConnectionStrings[3].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, "MES_CONFIG", "MESModeSwitch", "false"));//开启刷卡模式?
}
/// <summary>
/// 当某个异常未被捕获时出现,回调方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
}
}
/// <summary>
/// 返回正在运行的程序进程
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 已经有了就把它激活,并将其窗口放置最前端
/// </summary>
/// <param name="instance"></param>
public static void HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, SW_MAXIMIZE);
SetForegroundWindow(instance.MainWindowHandle);
}
}
}