프로그램이 이미 떠 있는데 중복으로 실행되는 걸 막을 필요가 있을 경우 사용하는 방법입니다.
예를 들어 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;
}
//
프로그램이 여러개 실행되는 것을 방지하거나, 또는 여러개 띄울 수도 있도록 작성된 샘플 소스 코드입니다.
도움이 되시길 바랍니다.
댓글