我有一个应用程序可以以两种不同的方式使用,具体取决于我是否将参数传递给main。使用以下示例代码,我可以:
- 启动多个实例,每个实例都带有唯一参数
- 启动一个没有参数的实例
static void Main(string[] args)
{
string mutexName = "";
if (args.Length > 0)
{
mutexName = args[0];
} else
{
mutexName = "NoArgs";
}
using (Mutex appMutex = new Mutex(false, String.Format("{0}-{1}", mutexName, appGuid)))
{
if (!appMutex.WaitOne(0, false))
{
MessageBox.Show("Instance already running");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
完美的作品!但我也希望有参数的应用程序和没有参数可以互相排斥。如在..如果一个或多个带参数的应用程序是打开的,你不能在没有参数的情况下启动它,反之亦然,如果没有args的程序打开,你就无法用args启动任何程序。
有没有人知道如何才能做到这一点?我尝试了使用互斥锁的不同方法,我开始认为这不能通过互斥锁完成。或者我需要“组”互斥或其他东西。
答案 0 :(得分:0)
您说如果启动NoArgs
应用程序,则无法启动其他应用程序。所以请亲自检查一下。
然后:
如果已经启动了剩余的应用程序,则无法使用互斥锁确定。为此,您需要计数互斥锁,也称为信号量。您可以使用信号量来确定启动的应用程序数量。然后,您需要一个用于“NoArgs”情况的互斥锁,每个参数传递的互斥锁名称的互斥锁,以及一个计算成功启动的应用程序的信号量。