public static MyAppInfo Instance() { if (appInfo == null) { appInfo = new MyAppInfo(); } return(appInfo); }
/// <summary> /// 모든 프로그램 종료 /// </summary> /// <returns></returns> public static List <string> KillProcess() { List <string> arrResult = new List <string>(); MyAppInfo.Instance().Setting.TaskList.ToList().ForEach(g => { KillProcess(g.Name); arrResult.Add(g.Name); }); return(arrResult); }
/// <summary> /// 프로그램 상태 체크 /// </summary> public static void TaskCheckAll() { try { // 리스트에 등록된 프로세스 상태를 할당한다. MyAppInfo.Instance().Setting.TaskList.ToList().ForEach(g => { var procs = Process.GetProcessesByName(g.Name); if (procs.Length > 0) { g.IsRun = true; g.MemorySize = (procs[0].WorkingSet64 / 1024f).ToString("#,##0 K"); g.StartTime = procs[0].StartTime.ToString(); g.IsResponse = procs[0].Responding; g.PID = procs[0].Id.ToString(); g.Node = string.IsNullOrEmpty(g.Node) ? procs[0].MainWindowTitle : g.Node; g.Handle = (int)procs[0].MainWindowHandle; GetWindowStatus(g); } else { g.IsRun = false; g.MemorySize = string.Empty; g.StartTime = string.Empty; g.PID = string.Empty; g.IsResponse = false; } }); // WerFault가 실행 되었는지 체크한다. var wer = Process.GetProcessesByName("WerFault"); if (wer.Length > 0) { // 기존에 감지되지 않았다면 이벤트를 전송한다. (이벤트 한번만 전송하기 위함) if (!MyAppInfo.Instance().IsWerFault) { MyAppInfo.Instance().IsWerFault = true; OnWerFault?.Invoke(); } } else { MyAppInfo.Instance().IsWerFault = false; } } catch (Exception) { throw; } }
/// <summary> /// 단일 프로그램 실행 /// </summary> /// <param name="task"></param> /// <returns></returns> public static string RunProcess(TaskInfo task) { ProcessStartInfo psi = new ProcessStartInfo(); if (task == null) { return(string.Empty); } //// 프로그램이 실행 중이지만 응답이 없는 경우 WerFault 킬 이후 해당 프로그램 킬. //if (task.IsRun && !task.IsResponse) //{ // var arg1 = KillProcess("WerFault"); // var arg2 = KillProcess(task.Name); // OnResponseFail?.Invoke(arg1, arg2); //} // 응답이 없는 경우 프로그램 킬 if (MyAppInfo.Instance().Setting.KillNotRespond) { if (task.IsRun && !task.IsResponse) { var arg = KillProcess(task.Name); OnResponseFail?.Invoke(arg); } } // 프로그램 실행 if (!task.IsRun) { psi.FileName = task.FilePath; psi.WindowStyle = ProcessWindowStyle.Minimized; if (File.Exists(psi.FileName)) { Process.Start(psi); OnRunTask?.Invoke(task.Name); return(task.Name); } } return(string.Empty); }