原文地址 https://www.cnblogs.com/younShieh/p/17749694.html
❤如果本文对你有所帮助,不妨点个关注和推荐呀,这是对笔者最大的支持~❤
在WPF应用程序中,想要实现软件重启,可以再Start一次该软件的exe程序。
但是有些时候我们想要这个程序是唯一运行的单例,而不是可以多开的程序。
我们可以先在程序启动时给程序加一个互斥锁,保证该应用程序运行进程的唯一性。在想要实现程序的自重启时,释放当前的互斥锁,然后再启动新的实例。
以下是一个示例:
public partial class App : Application { private static Mutex _mutex = null; const string appName = "MyAppName"; bool createdNew; protected override void OnStartup(StartupEventArgs e) { _mutex = new Mutex(true, appName, out createdNew); if (!createdNew) { //应用程序已经在运行!当前的执行退出。 Application.Current.Shutdown(); } base.OnStartup(e); } public void Restart() { // 释放互斥锁 _mutex.ReleaseMutex(); // 重启应用程序 System.Diagnostics.Process.Start(Application.ResourceAssembly.Location); Application.Current.Shutdown(); } }
我们添加了一个Restart方法,该方法首先释放互斥锁,然后启动新的应用程序实例,最后关闭当前的应用程序。这样,新的应用程序实例就可以获取互斥锁,而不会因为互斥锁已经被占用而无法启动。