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

时间:2014-04-18 08:21:51

标签: c#

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

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

1 个答案:

答案 0 :(得分:5)

使用基于ini文件(文件名或内容的MD5)的名称创建Mutex。如果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();
        }


    }
}