.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 가지 기본 기술이있는 것 같습니다.
- Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 클래스에서 파생하고 IsSingleInstance 속성을 true로 설정합니다. (여기서 경고는 WPF 응용 프로그램에서 작동하지 않는다는 것입니다.)
- 명명 된 뮤텍스를 사용하고 이미 생성되었는지 확인합니다.
- 실행중인 프로세스 목록을 가져오고 프로세스 이름을 비교합니다. (이는 주어진 사용자의 컴퓨터에서 실행되는 다른 프로세스에 비해 고유 한 프로세스 이름을 요구한다는 경고가 있습니다.)
내가 놓친 경고가 있습니까?
답변
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 응용 프로그램 프로젝트입니다.