본문 바로가기
C#/Winform

C# 중복 실행 방지

by HyunS_ 2019. 1. 17.
728x90

중복 실행 방지 2가지 방법


생성된 실행파일을 반복해서 실행하니까 실행 시키는 족족 계속 프로그램이 열립니다.


이럴 필요까지는 없는데 말이죠...


찾아보니 어려운 내용들도 아닙니다. 4가지 정도 있던데 그 중 두개만 테스트 해보고, 첫번째 것을 적용 했습니다.



1. 프로세스를 가져와서 프로세스의 이름으로 중복 실행을 방지합니다.


같은 이름의 프로세스 이름이 2개 이상 있으면 경고 메시지 출력 되게 하였습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static void Main()
{
    Process[] procs = Process.GetProcessesByName("실행될 프로세스 이름");
    // 두번 이상 실행되었을 때 처리할 내용을 작성합니다.
    if (procs.Length > 1)
    {
        MessageBox.Show("프로그램이 이미 실행되고 있습니다.\n다시 한번 확인해주시기 바랍니다.");
        return;
    }
    // 정상 동작 될 내용을 작성하면 됩니다.
    else
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
cs


2. Mutex 사용


특정 코드, 특정 자원에 대해 동시 접근을 차단하고 한번에 하나의 쓰레드만 수행하도록 하는 것이 뮤텍스라 한다 합니다.


그래서 아래의 코드 처럼 작성해보니 진짜 동시 실행이 안됩니다.


그냥 느낌상 뮤텍스는 안끌려서 저는 프로세스 이름 검색하는 걸로 중복 실행 방지 했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    bool createdNew;
    // mutex 객체 생성합니다. 아래와 같이 생성해두면 된다.
    Mutex mutex = new Mutex(true"프로그램 이름"out createdNew);
    if (createdNew)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new TrayApplication());
        mutex.ReleaseMutex();
    }
    else
    {
        MessageBox.Show("프로그램이 이미 실행되고 있습니다.");
        return;
    }
cs


728x90

댓글