IT정보공유/C#

C# 응용프로그램 프로세스 한개만 띄우기 (중복실행방지 및 동일 프로세스 강제 종료)

알지오™ 2020. 11. 18.

프로그램이 이미 떠 있는데 중복으로 실행되는 걸 막을 필요가 있을 경우 사용하는 방법입니다.

예를 들어 ABCD.exe 라는 프로그램이 여러개 실행되는 것을 막는거죠.

프로세스가 살아 있는지 체크 하려면 Program.cs 에 코딩해야 합니다.

프로그램 시작 진입점인 Main() 함수에서는
IsExistProcess(false) 함수를 통해서 동일한 프로세스가 떠 있는지 검사해서
없으면 그냥 프로그램을 실행시키고, 

동일한 프로세스가 있는 경우에는 다이얼로그 팝업을 발생시켜
프로세스를 종료할지, 아니면 그냥 중복으로 실행할지를 물어봅니다.

 

//
//Program.CS
//

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    if (IsExistProcess(false) == false)
    { 
        Application.Run(new FrmMain());
    }
    else
    {
        string message = String.Format("프로세스가 실행되어 있습니다.\r\n프로세스를 종료하고 실행하시겠습니까?\r\n프로그램을 여러개 실행시키시려면 아니오를 선택하세요.");

		if (MessageBox.Show(message, "프로세스 확인", MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            IsExistProcess(true);
        }

        Application.Run(new FrmMain());
    }

}

static bool IsExistProcess(bool bKillProcess)
{
    bool exist = false;
    foreach (Process process in Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName))
    {
        if (process.Id == Process.GetCurrentProcess().Id) // 현재 실행되는 프로세스인 경우는 스킵
		{
			continue;
		}
		
        exist = true;

        if (bKillProcess)
        {
            exist = KillProcess(process); // 다른 프로세스가 떠 있으면 강제 종료
        }
    }

    return exist;
}

static bool KillProcess(Process process)
{
    try
    {
        process.Kill(); //Process Kill 강제종료
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
    }

    return false;
}

//

 

프로그램이 여러개 실행되는 것을 방지하거나, 또는 여러개 띄울 수도 있도록 작성된 샘플 소스 코드입니다.

도움이 되시길 바랍니다.

 

댓글

💲 추천 글