36 lines
1.6 KiB
C#
36 lines
1.6 KiB
C#
using System.Threading;
|
|
using System.Windows;
|
|
|
|
namespace AudioBotProject
|
|
{
|
|
public partial class App : Application
|
|
{
|
|
// 💡 프로그램 전체에서 딱 하나만 존재해야 하는 '뮤텍스(열쇠)'입니다.
|
|
private static Mutex? _mutex = null;
|
|
|
|
// 프로그램이 본격적으로 켜지기(MainWindow를 띄우기) 직전에 실행되는 함수입니다.
|
|
protected override void OnStartup(StartupEventArgs e)
|
|
{
|
|
// 우리 프로그램만의 고유한 열쇠 이름 (절대 겹치지 않을 만한 이름으로 짓습니다)
|
|
const string mutexName = "AudioBotProject_Unique_Mutex_Key_12345";
|
|
bool isNewInstance;
|
|
|
|
// 컴퓨터 전체를 통틀어서 저 이름의 열쇠가 있는지 확인하고, 없으면 내가 가집니다.
|
|
_mutex = new Mutex(true, mutexName, out isNewInstance);
|
|
|
|
// 만약 내가 새로운 열쇠를 만든 게 아니라면? (이미 다른 애가 열쇠를 들고 켜져 있다면?)
|
|
if (!isNewInstance)
|
|
{
|
|
// 경고창을 띄우고
|
|
MessageBox.Show("프로그램이 이미 실행 중입니다!", "중복 실행 방지", MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
|
|
// 메인 화면을 띄우기도 전에 프로그램을 즉시 강제 종료해버립니다.
|
|
Application.Current.Shutdown();
|
|
return;
|
|
}
|
|
|
|
// 내가 첫 번째 실행이라면, 정상적으로 원래 하던 일(MainWindow 띄우기)을 계속합니다.
|
|
base.OnStartup(e);
|
|
}
|
|
}
|
|
} |