static void Main() 
{
Process[] nInstance=System.Diagnostics.Process.GetProcessesByName("WindowsApplication1");
if (nInstance.Length>1)
return;
Application.Run(new Form1());
}

解决方案 »

  1.   

    声明:本帖子只供参考,对使用本帖子而引起的任何预想不到的后果作者盖不负责!!楼上的这位兄弟说的这种方法有点不大妥当!因为如果有一个程序的文件名与你的程序的文件名相同,如果那个程序先运行那么你的程序就不能运行了!
    这跟以前有人用FindWindowsEx这个函数来查找自己程序窗口的标题是一样的,无法避免其他窗口的标题也是这个。解决办法:
    使用创建互斥体的办法。详细情况参见VB版。
      

  2.   

    声明:本帖子只供参考,对使用本帖子而引起的任何预想不到的后果作者盖不负责!!你也可采用以下简单方法:
    public static Process RunningInstance() 
     

     
         Process current = Process.GetCurrentProcess(); 
     
         Process[] processes = Process.GetProcessesByName (current.ProcessName); 
     
          foreach (Process process in processes) 
     
          {  
               if (process.Id != current.Id) 
     
              { 
      
                    if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName) 
     
                    { 
     
                        return process; 
     
                    } 
     
               } 
     
          } 
     
           return null;