WPF 응용 프로그램이 다른 응용 프로그램 인스턴스가 실행 중인지 확인할 수 있습니까? 하나의 인스턴스 만 있어야하는 응용 프로그램을 만들고 사용자가 다시 열려고하면 "다른 인스턴스가 실행 중입니다."라는 메시지를 표시합니다.WPF 응용 프로그램의 다른 인스턴스가 실행되고 있는지 확인하십시오.
내 응용 프로그램의 이름과 일치하도록 프로세스 로그를 확인해야 겠지만 어떻게해야하는지 잘 모르겠습니다.
WPF 응용 프로그램이 다른 응용 프로그램 인스턴스가 실행 중인지 확인할 수 있습니까? 하나의 인스턴스 만 있어야하는 응용 프로그램을 만들고 사용자가 다시 열려고하면 "다른 인스턴스가 실행 중입니다."라는 메시지를 표시합니다.WPF 응용 프로그램의 다른 인스턴스가 실행되고 있는지 확인하십시오.
내 응용 프로그램의 이름과 일치하도록 프로세스 로그를 확인해야 겠지만 어떻게해야하는지 잘 모르겠습니다.
exe가 복사되고 이름이 바뀌면 이름 처리 방법으로 프로세스가 실패 할 수 있습니다. .vshost가 프로세스 이름에 추가되기 때문에 디버깅도 문제가 될 수 있습니다.
는<Application x:Class="SingleInstance.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Application>
그 후, 당신이 갈 수 있습니다 ... 당신이 다음과 같습니다 있도록 App.Xaml 파일에서 StartupUri 속성을 제거하여 시작할 수 있습니다, WPF에서 단일 인스턴스 응용 프로그램을 만들려면 App.xaml.cs를 파일과는 다음과 같습니다 있도록 변경 ...
public partial class App
{
// give the mutex a unique name
private const string MutexName = "##||ThisApp||##";
// declare the mutex
private readonly Mutex _mutex;
// overload the constructor
bool createdNew;
public App()
{
// overloaded mutex constructor which outs a boolean
// telling if the mutex is new or not.
// see http://msdn.microsoft.com/en-us/library/System.Threading.Mutex.aspx
_mutex = new Mutex(true, MutexName, out createdNew);
if (!createdNew)
{
// if the mutex already exists, notify and quit
MessageBox.Show("This program is already running");
Application.Current.Shutdown(0);
}
}
protected override void OnStartup(StartupEventArgs e)
{
if (!createdNew) return;
// overload the OnStartup so that the main window
// is constructed and visible
MainWindow mw = new MainWindow();
mw.Show();
}
}
뮤텍스가 존재하는 경우이 테스트되고이 존재하는 경우, 응용 프로그램이 메시지를 표시하고 종료됩니다. 그렇지 않으면 응용 프로그램이 생성되고 OnStartup 재정의가 호출됩니다.
Windows 버전에 따라 메시지 상자를 올리면 기존 인스턴스가 Z 순서의 맨 위로 이동합니다. 그렇지 않은 경우 창을 맨 위에 올리는 것에 대해 다른 질문을 할 수 있습니다.
Win32Api에는 동작을 추가로 사용자 지정하는 데 도움이되는 추가 기능이 있습니다.
이 방법을 사용하면 나중에 메시지 알림이 표시되고 주 창의 인스턴스가 하나만 생성되도록 할 수 있습니다.
결함이 있습니까? 이 개념에? 또한 메시지를 표시하는 대신 이미 실행중인 인스턴스에만 초점을 맞추는 방법이 있습니까? Thx –
@StefanVasiljevic 예, 몇 개. 새로운 질문을 열고 준비가되면 나를 핑 (ping) 할 수 있습니다. 이 질문에서 메시지 등록이나 Win32 API를 탐색 할 충분한 공간이 없습니다. –
좋은 답변입니다. 비슷한 질문에 대한 몇 가지 다른 답변보다 훨씬 명확합니다. – ElDoRado1239
[이름으로 프로세스 가져 오기] (http://msdn.microsoft.com/en-us/library/z3w4xdc9.aspx),이 작업을 수행하는 방법과 관련하여 여러 가지 다른 질문이 있습니다. [즉 뮤텍스] (http://stackoverflow.com/questions/184084/how-to-force-c-sharp-net-app-to-run-only-one-instance-in-windows) – Sayse