SwD*_*n81 47
我会使用Mutex
static void Main()
{
string mutex_id = "MY_APP";
using (Mutex mutex = new Mutex(false, mutex_id))
{
if (!mutex.WaitOne(0, false))
{
MessageBox.Show("Instance Already Running!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
// Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
Ran*_*Ran 33
如果您决定使用Mutex用于此目的,您应该注意一些陷阱:
如果要将应用程序限制为每台计算机一个实例(即每个登录用户不是一个实例),那么您将需要以互斥锁名称开头的前缀Global\.如果不添加此前缀,操作系统将为每个用户创建一个不同的互斥锁实例.
如果您在启用了UAC的Windows Vista或更高版本的计算机上运行,并且当前的应用程序实例有可能以管理员身份运行,则下一个实例将无法检测到它,您将获得权限异常.为避免这种情况,您需要在创建Mutex时为其指定一组不同的权限.
Mad*_*uja 19
有很多方法,例如 -
每个都演示如下:
http://iridescence.no/post/CreatingaSingleInstanceApplicationinC.aspx
http://www.codeproject.com/KB/cs/restricting_instances.aspx
http://www.codeproject.com/KB/cs/singleinstance.aspx
每个都有其优点和缺点.但我相信创建互斥锁是最好的选择.