Exemple #1
0
 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);
        }