initial commit
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
|
||||
namespace ClashWidget;
|
||||
|
||||
public partial class App : Application
|
||||
{
|
||||
private static Mutex? _mutex;
|
||||
|
||||
protected override void OnStartup(StartupEventArgs e)
|
||||
{
|
||||
// Kill any existing ClashWidget instances
|
||||
var current = Process.GetCurrentProcess();
|
||||
foreach (var p in Process.GetProcessesByName("ClashWidget"))
|
||||
{
|
||||
if (p.Id != current.Id)
|
||||
{
|
||||
try { p.Kill(); p.WaitForExit(2000); } catch { }
|
||||
}
|
||||
}
|
||||
|
||||
// Single-instance mutex
|
||||
_mutex = new Mutex(true, "ClashWidget_SingleInstance", out bool createdNew);
|
||||
if (!createdNew)
|
||||
{
|
||||
MessageBox.Show("ClashWidget is already running.", "Info",
|
||||
MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
Shutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
DispatcherUnhandledException += (s, args) =>
|
||||
{
|
||||
MessageBox.Show($"Error:\n{args.Exception.Message}",
|
||||
"Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
args.Handled = true;
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
var window = new MainWindow();
|
||||
window.Show();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"Startup failed:\n{ex.Message}",
|
||||
"Startup Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnExit(ExitEventArgs e)
|
||||
{
|
||||
_mutex?.ReleaseMutex();
|
||||
_mutex?.Dispose();
|
||||
base.OnExit(e);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user