static System.Threading.Mutex mutex; //定义成员变量
static void Main()
{try
{
string processName = "Global\\Test.TestSingle"; //关键点在于Global,如果不加Global\\,则只能一个用户下有用,多个用户没用。
//只能在管理员权限运行,非管理员权限会报错。
bool createdNew = false;
mutex = new System.Threading.Mutex(true, processName, out createdNew);
if (createdNew)
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "系统提示");
}
finally
{
mutex.ReleaseMutex();
}
}
else
{
DialogResult dr = MessageBox.Show("系统已经运行了一个实例!\r\n", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "系统提示");
}
}
为了避免在远程桌面启动多个程序,可以调用C#的SystemInformation.TerminalServerSession,判断远程桌面时,不让启动程序。
如:
if (SystemInformation.TerminalServerSession)
{
MessageBox.Show("远程桌面登录时,禁止启动系统,请本机登录启动", "系统提示");
return;
}