프로그램(C# etc.)

동일한 프로그램이 동시에 2개가 켜지지 않도록하는 c# 코드

질문폭격 2023. 1. 16. 13:03

C#에서 뮤텍스("상호 제외"의 줄임말)를 사용하여 두 개의 동일한 프로그램이 동시에 실행되는 것을 방지할 수 있습니다. 뮤텍스는 공유 리소스에 대한 액세스를 제어하는 데 사용할 수 있는 동기화 개체입니다. 프로그램이 뮤텍스를 획득하려고 할 때, 뮤텍스가 이미 다른 프로그램에 의해 유지되고 있다면, 그것은 차단(즉, 대기)할 것이다.

다음은 뮤텍스를 사용하여 프로그램의 여러 인스턴스가 동시에 실행되지 않도록 방지하는 방법의 예입니다:

using System;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        // Create a mutex with a unique name.
        using (var mutex = new Mutex(false, "MyUniqueProgramName"))
        {
            // Attempt to acquire the mutex.
            if (!mutex.WaitOne(0, false))
            {
                Console.WriteLine("Another instance of the program is already running.");
                return;
            }

            // The mutex has been acquired, so the program can continue running.
            // ...
        }
    }
}

이 예제에서 프로그램은 고유한 이름인 "MyUniqueProgramName"을 가진 뮤텍스를 만듭니다. 프로그램이 시작되면 WaitOne 메서드를 호출하여 뮤텍스를 획득하려고 시도합니다. 뮤텍스가 이미 다른 프로그램에 의해 유지되고 있는 경우, WaitOne 메서드는 프로그램의 다른 인스턴스가 이미 실행 중임을 나타내는 false를 반환합니다. 이 경우 프로그램에 메시지가 표시되고 종료됩니다. 뮤텍스가 다른 프로그램에 의해 유지되지 않으면 WaitOne 메서드가 true를 반환하여 프로그램이 뮤텍스를 획득했으며 계속 실행할 수 있음을 나타냅니다.

뮤트크세스는 시스템 전체의 개체이며 서로 다른 프로세스에서 리소스에 대한 액세스를 동기화하는 데 사용할 수 있습니다.

 

 

내가 사용한 코드

// 사용 부분
	if (IsExistProcessMutex(Process.GetCurrentProcess().ProcessName))
      	{
      	    MessageBox.Show("이미 실행중 입니다...");
      	}
      	else
      	{
      	    Application.EnableVisualStyles();
      	    Application.SetCompatibleTextRenderingDefault(false);
      	    Application.Run(new Form1());
      	}
           
// 함수 부분            
        static bool IsExistProcessMutex(string processName)
        {
            bool createdNew;
 
            Mutex mutex = new Mutex(true, processName, out createdNew);
 
            if (createdNew == true)
                return false;
            else
                return true;
 
        }