我有一个使用INI文件启动的应用程序。 具有不同INI文件配置的同一应用程序的多个实例。
这也导致可以启动具有相同INI文件的多个实例。我想仅限制这种情况,但必须允许具有不同INI文件的多个实例。实现这一目标的最佳方法是什么?
答案 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();
}
}
}