检查是否已经有一个实例在运行
Process[] _processes = Process.GetProcessesByName("WlServer");
if ( _processes.Length > 1 )
{
Application.Exit();
}

解决方案 »

  1.   

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Diagnostics;
    using System.Reflection;
    using System.Runtime.InteropServices;public class MainForm : System.Windows.Forms.Form
    {
       private const int WS_SHOWNORMAL = 1;
    [DllImport("User32.dll")]
    private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
    [DllImport("User32.dll")] 
    private static extern bool SetForegroundWindow(IntPtr hWnd); public MainForm()
    {
    InitializeComponent();
    }
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main() 
    {
    Process instance = GetRunningInstance();
    if(instance == null)
    {
    Application.Run(new MainForm());
    }
    else
    {
    HandleRunningInstance(instance);
    }
    }
    /// <summary>
    /// 获取应用程序的实例,没有其它的例程,返回Null
    /// </summary>
    /// <returns></returns>
    public static Process GetRunningInstance()
    {
    Process current = Process.GetCurrentProcess();
    Process[] processes = Process.GetProcessesByName (current.ProcessName);
    //遍历正在有相同名字运行的例程
    foreach (Process process in processes)
    {
    //忽略现有的例程
    if (process.Id != current.Id)
    //确保例程从EXE文件运行
    if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
    //返回另一个例程实例
    return process;
    }
    return null;
    }
    /// <summary>
    /// 获取窗口句柄
    /// </summary>
    /// <param name="instance"></param>
    public static void HandleRunningInstance(Process instance)
    {
    //确保窗口没有被最小化或最大化
    ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);
    //设置真实例程为foreground window
    SetForegroundWindow (instance.MainWindowHandle);
    }
    }