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 { /// /// 해당 응용 프로그램의 주 진입점입니다. /// [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(); } } }