0

我在 C# 中有一个控制台应用程序,我想限制我的应用程序一次只运行一个实例。它在一个系统中工作正常。当我尝试在另一个系统中运行 exe 时它不起作用。问题是在一台电脑上我只能打开一个exe。当我尝试在另一台电脑上运行时,我可以打开多个 exe。我该如何解决这个问题?下面是我写的代码。

string mutexId = Application.ProductName;
using (var mutex = new Mutex(false, mutexId))
{
    if (!mutex.WaitOne(0, false))
    {
        MessageBox.Show("Instance Already Running!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
        return;
    }

        //Remaining Code here
}
4

2 回答 2

1

无论如何,我会使用这种方法:

// Use a named EventWaitHandle to determine if the application is already running.

bool eventWasCreatedByThisInstance;

using (new EventWaitHandle(false, EventResetMode.ManualReset, Application.ProductName, out eventWasCreatedByThisInstance))
{
    if (eventWasCreatedByThisInstance)
    {
        runTheProgram();
        return;
    }
    else // This instance didn't create the event, therefore another instance must be running.
    {
        return; // Display warning message here if you need it.
    }
}
于 2013-01-16T10:03:34.957 回答
0

我的好旧解决方案:

    private static bool IsAlreadyRunning()
    {
        string strLoc = Assembly.GetExecutingAssembly().Location;
        FileSystemInfo fileInfo = new FileInfo(strLoc);
        string sExeName = fileInfo.Name;
        bool bCreatedNew;

        Mutex mutex = new Mutex(true, "Global\\"+sExeName, out bCreatedNew);
        if (bCreatedNew)
            mutex.ReleaseMutex();

        return !bCreatedNew;
    }

资源

于 2013-01-16T10:09:05.020 回答