【WPF】单例软件实现自重启

原文地址 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方法,该方法首先释放互斥锁,然后启动新的应用程序实例,最后关闭当前的应用程序。这样,新的应用程序实例就可以获取互斥锁,而不会因为互斥锁已经被占用而无法启动。

posted on 2023-10-08 17:21  Nicccck  阅读(1252)  评论(2编辑  收藏  举报

导航