내가 과거에 사용한 방법 중 하나는 시스템 뮤텍스 개체를 사용하는 것이 었습니다. 그 뒤에있는 이론은 응용 프로그램의 첫 번째 인스턴스가 뮤텍스 개체를 생성하고 응용 프로그램의 후속 인스턴스가 미리 정의 된 뮤텍스에 대한 핸들을 열려고 시도하며 존재하는 경우 bamo! 두 번째 및 세 번째 및 네 번째 .... 인스턴스를 종료하십시오.
public static void CheckSingleInstance()
{
bool created = false;
_singleInstance = new Mutex(true, "PredefinedMutexName##1", out created);
if (!created)
{
MessageBox.Show("Another instance of this application is already running. Click OK to switch to that instance.", "Application running", MessageBoxButtons.OK, MessageBoxIcon.Information);
Process proc = Process.GetCurrentProcess();
Process[] procs = Process.GetProcessesByName(proc.ProcessName);
bool exit = false;
Process process = null;
foreach (Process p in procs)
{
if (p.Id != proc.Id && p.MainModule.FileName == proc.MainModule.FileName)
{
// ShowWindow(p.MainWindowHandle, 1/*SW_SHOWNORMAL*/);
process = p;
exit = true;
}
}
if (exit)
{
Application.Exit();
if (process != null)
NativeMethods.SetForegroundWindow(process.MainWindowHandle);
return;
}
}
}
에 간 응용 프로그램 또는 시스템 간 통신을 할 수있는 현대적인 방법으로 내가 WCF를 사용하는 것과 다른 형태/응용 프로그램 도메인 간의 통신을위한
그리고 Windows 메시지는 이것과 관련이 있습니까? –누군가가 COM에 레지스트리에 첫 번째 응용 프로그램을 등록한 다음 응용 프로그램이 기존 응용 프로그램을 호출하기 위해로드 할 때이를 쿼리합니다. 다른 아이디어는 WinProc을 오버로드하고 WM_COMMAND를 호출하여 대화 상자의 인스턴스를 만드는 것입니다. WCF는 우리를 위해 명명 된 파이프를 만듭니다. 적어도 저것은 거기 던져진 무슨이다. – blu
좋습니다. 두 번째 인스턴스를 실행할 때 이미 실행중인 응용 프로그램 인스턴스에 새 창을 만드는 방법을 알려주는 것이 좋습니다. 창 메시지는 정상적으로 작동하지만 WCF는 인터페이스, 매개 변수, 구성에 대해보다 다양한 기능을 제공하므로 훨씬 더 깨끗합니다. – mlessard