只允许我的应用程序的最新实例执行?

时间:2012-05-30 15:33:39

标签: c# .net mutex

我目前在我的应用中使用互斥锁,只允许运行1个实例。我的问题是,我现在如何获取此代码,并将其转换为关闭当前运行的实例并允许打开一个新代码?

我想解决的问题:我的应用程序接受了args并且需要经常使用新的params重新打开。目前,没有互斥锁,它可以无限次打开。我想只使用最新的一组参数来运行一个实例。

谢谢, 凯文

一些代码

bool createdMutex = true;

            Mutex mutex = new Mutex(true, "VideoViewerApp", out createdMutex);

            if (createdMutex && mutex.WaitOne())

            {

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new frmVideo(args[0], args[1], args[2], args[4], args[5]));
                mutex.ReleaseMutex();

            }

mutex.close();

1 个答案:

答案 0 :(得分:2)

互斥体不适用于进程间事件通知,因此无法使用互斥锁关闭其他进程。我建议做的是像this question.

中推荐的那样

我会把这两个答案结合起来,就像我用过的那样:

Process[] processes = Process.GetProcesses();
string thisProcess = Process.GetCurrentProcess().MainModule.FileName;
string thisProcessName = Process.GetCurrentProcess().ProcessName;
foreach (var process in processes)
{
    // Compare process name, this will weed out most processes
    if (thisProcessName.CompareTo(process.ProcessName) != 0) continue;
    // Check the file name of the processes main module
    if (thisProcess.CompareTo(process.MainModule.FileName) != 0) continue;
    if (Process.GetCurrentProcess().Id == process.Id) 
    {
        // We don't want to commit suicide
        continue;
    }

    // Tell the other instance to die
    process.CloseMainWindow();
}