[C#] .NET에서 특정 앱의 여러 인스턴스를 방지 하시겠습니까?

.NET에서 앱의 여러 인스턴스가 동시에 실행되는 것을 방지하는 가장 좋은 방법은 무엇입니까? “최상의”기술이없는 경우 각 솔루션에 대해 고려해야 할 몇 가지주의 사항은 무엇입니까?



답변

Mutex를 사용하십시오. GetProcessByName을 사용하는 위의 예제 중 하나에는 많은주의 사항이 있습니다. 다음은 주제에 대한 좋은 기사입니다.

http://odetocode.com/Blogs/scott/archive/2004/08/20/401.aspx

[STAThread]
static void Main()
{
   using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
   {
      if(!mutex.WaitOne(0, false))
      {
         MessageBox.Show("Instance already running");
         return;
      }

      Application.Run(new Form1());
   }
}

private static string appGuid = "c0a76b5a-12ab-45c5-b9d9-d693faa6e7b9";


답변

if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
{
  AppLog.Write("Application XXXX already running. Only one instance of this application is allowed", AppLog.LogMessageType.Warn);
  return;
}


답변

다음은 하나의 인스턴스 만 실행되도록하는 데 필요한 코드입니다. 이것은 명명 된 뮤텍스를 사용하는 방법입니다.

public class Program
{
    static System.Threading.Mutex singleton = new Mutex(true, "My App Name");

    static void Main(string[] args)
    {
        if (!singleton.WaitOne(TimeSpan.Zero, true))
        {
            //there is already another instance running!
            Application.Exit();
        }
    }
}


답변

Hanselman 은이를 위해 Microsoft.VisualBasic 어셈블리의 WinFormsApplicationBase 클래스를 사용하는 것에 대한 게시물 을 가지고 있습니다.


답변

지금까지 제안 된 3 가지 기본 기술이있는 것 같습니다.

  1. Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 클래스에서 파생하고 IsSingleInstance 속성을 true로 설정합니다. (여기서 경고는 WPF 응용 프로그램에서 작동하지 않는다는 것입니다.)
  2. 명명 된 뮤텍스를 사용하고 이미 생성되었는지 확인합니다.
  3. 실행중인 프로세스 목록을 가져오고 프로세스 이름을 비교합니다. (이는 주어진 사용자의 컴퓨터에서 실행되는 다른 프로세스에 비해 고유 한 프로세스 이름을 요구한다는 경고가 있습니다.)

내가 놓친 경고가 있습니까?


답변

1-program.cs에 참조 만들기->

using System.Diagnostics;

2- void Main()코드의 첫 번째 줄로 입력->

 if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length >1)
                return;

그게 다야.


답변

실행 파일에 대한 프로젝트를 만들 때 Visual Studio 2005 또는 2008을 사용하면 “응용 프로그램”패널 내의 속성 창에 “단일 인스턴스 응용 프로그램 만들기”라는 확인란이 있으며 단일 인스턴스 응용 프로그램에서 응용 프로그램을 변환하기 위해 활성화 할 수 있습니다. .

다음은 제가 말하는 창을 캡처 한 것입니다.
여기에 이미지 설명 입력
이것은 Visual Studio 2008 Windows 응용 프로그램 프로젝트입니다.