반응형
프로그램을 중복실행을 방지하는 방법에 대해 알아보겠습니다. 중복 실행되지 않아야 되는 서비스의 경우는 중복실행이 되지 않도록 해주어야합니다. 중복실행을 방지하는 2가지방법에 대해서 알아보도록 하겠습니다. Process클래스를 사용하여 동일한 프로세스명이 있는지 확인하여 체크하는 방법과 뮤텍스를 사용해서 동시접근이 되지 않도록 하는 방법이 있습니다.
1. 프로세스 개수로 확인하기
System.Diagnostics네임스페이스를 추가해서 Process클래스를 사용하게합니다.
Process.GetCurrentProcess().ProcessName : 현재실행하는 프로세스의 이름으로 해당프로세스가 2개이상인지 체크하여두개이상이면 중복 실행된것으로 판단합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics; //Process
namespace DuplicationRunPrevention
{
static class Program
{
/// <summary>
/// 해당 애플리케이션의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
if (IsExistProcess(Process.GetCurrentProcess().ProcessName))
{
MessageBox.Show("이미실행중입니다.");
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
static bool IsExistProcess(string processName)
{
Process[] process = Process.GetProcesses();
int cnt = 0;
//프로세스명으로 확인해서 동일한 프로세스 개수가 2개이상인지 확인합니다.
//현재실행하는 프로세스도 포함되기때문에 1보다커야합니다.
foreach (var p in process)
{
if (p.ProcessName == processName)
cnt++;
if (cnt > 1)
return true;
}
return false;
}
}
}
|
2. 뮤텍스를 사용한 중복유무 확인
System.Threading 네임스페이스를 추가하여 Mutex를 사용한다.Mutex 생성시에 createdNew리턴값으로 이미 명명된 뮤텍스가 있는지 확인해서 동일한값으로 실행이 되어있는지 확인하여 중복유무를 판단한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading; //Mutex
namespace DuplicationRunPreventionMutex
{
static class Program
{
/// <summary>
/// 해당 애플리케이션의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
if (IsExistProcessMutex(Process.GetCurrentProcess().ProcessName))
{
MessageBox.Show("이미실행중입니다.");
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
static bool IsExistProcessMutex(string processName)
{
bool createdNew;
// createdNew : processName로 이미 명명된 뮤텍스가 있을경우 false반환
// 신규인경우는 true를반환한다.
Mutex mutex = new Mutex(true, processName, out createdNew);
if (createdNew == true)
return false;
else
return true;
}
}
}
|
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 빌드시 이미지파일 포함하기 (0) | 2021.09.15 |
---|---|
[C#] Null문자열제거 string.Replace("\0", string.Empty) (1) | 2021.09.13 |
[C#] 윈폼 콘솔로 디버깅하기 (0) | 2021.07.17 |
[C#] MariaDB 연동방법 (3) | 2021.05.23 |
[C#] 프로그램상에서 크롬브라우저 실행방법 (0) | 2021.01.26 |