Files
ATV_STDLabelAttach/Handler/Project/Program.cs
2025-08-06 10:05:24 +09:00

128 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Resources;
using System.Threading;
using AR;
using System.Security.Principal;
using System.Diagnostics;
namespace Project
{
static class Program
{
/// <summary>
/// 해당 응용 프로그램의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
//중복실행방지
var guidAttr = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), true);
if (guidAttr != null)
{
var guida = (GuidAttribute)guidAttr[0];
var guidstr = guida.Value;
Mutex mtx = new Mutex(true, guidstr);
var success = mtx.WaitOne(new TimeSpan(0, 0, 1));
if (success == false)
{
//MessageBox.Show("중복실행 불가\n\n프로그램이 실행 중 입니다");
//"※ Amkor Standard Label Attach"
var list = System.Diagnostics.Process.GetProcesses();
var prc = list.Where(t => t.ProcessName == "Amkor" && t.MainModule.FileVersionInfo.FileDescription.Contains("Amkor Standard Label")).FirstOrDefault();
if (prc != null)
{
var dlg = MessageBox.Show(
"중복 실행이 감지 되었습니다.\r\n" +
"현재 실행중인 프로그램을 종료 할까요?\r\n" +
"프로그램은 다시 실행하세요", "중복실행", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (dlg == DialogResult.Yes)
{
prc.Kill();
}
}
return;
}
}
//if(IsAdmin()==false)
//{
// var dlg = MessageBox.Show(
// "이 프로그램은 관리자 모드로 실행해야 합니다", "중복실행", MessageBoxButtons.YesNo,
// MessageBoxIcon.Question);
// return;
//}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.Run(new FMain());
}
static bool IsAdmin()
{
var identy = WindowsIdentity.GetCurrent();
if(identy != null)
{
var princ = new WindowsPrincipal(identy);
return princ.IsInRole(WindowsBuiltInRole.Administrator);
}
return false;
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
string emsg = "Fatal Error(UHE)\n\n" + e.ExceptionObject.ToString();
PUB.log.AddE(emsg);
PUB.log.Flush();
UTIL.SaveBugReport(emsg);
Shutdown();
var f = new AR.Dialog.fErrorException(emsg);
f.ShowDialog();
Application.ExitThread();
}
static void Shutdown()
{
PUB.dio.SetOutput(false); //모두끄기
PUB.sm.SetNewStep(eSMStep.IDLE, true);
PUB.flag.set(eVarBool.FG_USERSTEP, false, "shutdown");
PUB.log.Add("Program Close");
PUB.log.Flush();
PUB.dio.StopMonitor();
PUB.mot.StopMonitor();
PUB.sm.Stop();
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
string emsg = "Fatal Error(ATE)\n\n" + e.Exception.ToString();
//emsg += "stack:" + e.Exception.StackTrace;
PUB.log.AddE(emsg);
PUB.log.Flush();
UTIL.SaveBugReport(emsg);
Shutdown();
var f = new AR.Dialog.fErrorException(emsg);
f.ShowDialog();
Application.ExitThread();
}
}
}