C#

[C#] 프로그램 중복실행을 방지하자!

C#Developer 2021. 7. 14. 21:46

안녕하세요. 회원여러분.
오늘은 C#의 프로그램 중복실행 방지 코드에 대해 알아보겠습니다.

중복실행의 대표적인 예가 윈도우에서 제공하는 메모장이나 계산기와 같은
프로그램입니다. 

중복실행이 가능한 프로그램



이들 프로그램과는 다르게 중복실행이 되면 안되는 게임이나, 데이터 등록 목적의 프로그램은
다음과 같은 코드를 사용하면 될 것입니다.

        /// <summary>
        /// 프로그램의 실행여부를 확인하는 함수.
        /// </summary>
        /// <returns></returns>
        public static bool IsRunningAppCheck()
        {
            System.Diagnostics.Process Process = System.Diagnostics.Process.GetCurrentProcess();
            string ProcName = Process.ProcessName;

            if (System.Diagnostics.Process.GetProcessesByName(ProcName).Length > 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

위 코드가 이번 포스팅이 핵심 함수입니다.

System.Diagnostics.Process 
로컬 및 원격 프로세스에 대한 액세스를 제공하고 로컬 시스템 프로세스를 시작하고 중지할 수 있습니다.
MSDN : https://docs.microsoft.com/ko-kr/dotnet/api/system.diagnostics.process?view=net-5.0

쉽게 말해서 프로그램의 시작, 종료를 할 수 있으며, 
현재 실행된 프로그램이나 실행 중인 프로그램의 정보를 구할 수 있습니다.

이 클래스를 사용하여 실행하려는 프로그램이 실행중인 프로그램들 중 하나라면 
실행이 되지 않도록 하는 것이 위 함수의 역할입니다.

C#의 프로그램 실행시 가장 먼저 실행되는 함수는 Program.cs의 static void Main() 함수입니다.

 

Program.cs 파일

 

Main() 함수


이 함수에 중복실행방지 함수를 추가하는 것입니다.

        /// <summary>
        /// 해당 애플리케이션의 주 진입점입니다.
        /// </summary>
        [STAThread]
        static void Main()
        {
            try
            {
                if (IsRunningAppCheck() == false)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new Form1());
                }
                else
                {
                    MessageBox.Show("이미 프로그램이 실행 중 입니다.");
                }
            }
            catch (Exception ex)
            {

            }
        }

위와 같이 Main()함수를 수정/빌드 후 .exe파일을 중복 실행시 다음과 같은 메시지창이 실행되며,
중복실행이 되지 않는 것을 확인할 수 있습니다.

 

중복실행 방지
샘플프로젝트.zip
0.04MB

위 소스를 사용한 샘플소스를 참고하시기 바랍니다. 

 

이상 사이버지식정보방이었습니다.