c#windows应用程序中的多实例限制

本文关键字:实例 应用程序 c#windows | 更新日期: 2023-09-27 17:58:49

我有一个使用INI文件启动的应用程序。具有不同INI文件配置的同一应用程序上的多个实例。

这也导致可以启动具有相同INI文件的多个实例。我只想限制这种情况,但必须允许具有不同INI文件的多个实例。实现这一目标的最佳方式是什么?

c#windows应用程序中的多实例限制

创建一个Mutex,其名称基于ini文件(文件名或内容的MD5)。如果Mutex已经存在,则表示应用程序已经使用指定的ini文件启动。

public static string CalculateMD5Hash(string input)
{
    using (MD5 md5 = System.Security.Cryptography.MD5.Create())
    {
        byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
        byte[] hash = md5.ComputeHash(inputBytes);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < hash.Length; i++)
        {
            sb.Append(hash[i].ToString("X2"));
        }
        return sb.ToString();
    }
}
static void Main(string[] args)
{
    using (Mutex mutex = new Mutex(true, CalculateMD5Hash(args[0])))
    {
        if (mutex.WaitOne(100))
        {
            Console.WriteLine("First instance");
            Console.ReadKey();
        }
        else
        {
            Console.WriteLine("Second instance");
            Console.ReadKey();
        }

    }
}