刚遇到同一个程序 禁止多个实例运行 ,第一想到的是 到 msdn 的System.Threading 里去找;找到 Mutex 看看 下面的实例 基本能解决这个问题 ,
public Mutex( bool initiallyOwned, string name, out bool createdNew, MutexSecurity mutexSecurity )
参数
initiallyOwned
类型: System.Boolean
如果为 true,则给予调用线程已命名的系统互斥体的初始所属权(如果已命名的系统互斥体是通过此调用创建的);否则为 false。
name
类型: System.String
系统互斥体的名称。如果值为 null,则 Mutex 是未命名的。
createdNew
类型: System.Boolean %
在此方法返回时,如果创建了局部互斥体(即,如果 name 为 null或空字符串)或指定的命名系统互斥体,则包含布尔值 true;如果指定的命名系统互斥体已存在,则为 false。该参数未经初始化即被传递。
mutexSecurity
类型: System.Security.AccessControl.MutexSecurity
一个 MutexSecurity 对象,表示应用于已命名的系统互斥体的访问控制安全性。
但是不能防止程序改名运行; 然后继续在有关线程类中找 功夫不负有心人,找到了System.Threading.Thread.CurrentThread 作用是 获取当前正在运行的线程。 里面有设置和获取 线程名字的name属性 哈哈 这下都可以完美解决了 完整的代码 应该这样 在主程序 main函数中 这样:
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
bool blnCreate;
System.Threading.Thread.CurrentThread.Name = "winform1";
System.Threading.Mutex m = new System.Threading.Mutex(true, System.Threading.Thread.CurrentThread.Name, out blnCreate);
if (blnCreate)
{
Application.Run(new Form1());
}
else
{
MessageBox.Show("只能运行一个实例程序");
}
}