您的位置:首页 > 其它

保证应用程序只有一个实例在运行

2016-07-03 22:28 357 查看
保证应用程序只有一个实例在运行

[C#]  

public static Process RunningInstance()  

{  

     Process current = Process.GetCurrentProcess();  

     Process[] processes = Process.GetProcessesByName (current.ProcessName); 

 

 

      //Loop through the running processes in with the same name  

      foreach (Process process in processes)  

      {  

          //Ignore the current process  

           if (process.Id != current.Id)  

          {  

               //Make sure that the process is running from the exe file.  

                if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)  

                {  

                    //Return the other process instance.  

                    return process;  

                }  

           }  

      }  

      //No other instance was found, return null.  

      return null;  



[VB.NET]  

Public Shared Function RunningInstance() As Process  

     Dim current As Process = Process.GetCurrentProcess()  

     Dim processes As Process() = Process.GetProcessesByName(current.ProcessName) 

 

     'Loop through the running processes in with the same name  

     Dim process As Process  

     For Each process In processes  

          'Ignore the current process  

          If process.Id <> current.Id Then  

               'Make sure that the process is running from the exe file.  

               If [Assembly].GetExecutingAssembly().Location.Replace("/", "\") = current.MainModule.FileName Then  

                    'Return the other process instance.  

                    Return process  

               End If  

          End If  

     Next process  

     'No other instance was found, return null.  

     Return Nothing  

End Function 'RunningInstance

如果检测到已有窗体实例,将此实例显示出来参考:

[STAThread]

static void Main() 

{

       //Get the running instance.

       Process instance = RunningInstance();

       if (instance == null)

       {

              //There isn't another instance, show our form.

              Application.Run (new Form2());

       }

       else

       {

              //There is another instance of this process.

              HandleRunningInstance(instance);

       }

}

public static Process RunningInstance()

{

       Process current = Process.GetCurrentProcess();

       Process[] processes = Process.GetProcessesByName (current.ProcessName);

       //Loop through the running processes in with the same name

       foreach (Process process in processes)

       {

              //Ignore the current process

              if (process.Id != current.Id)

              {

                     //Make sure that the process is running from the exe file.

                     if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==current.MainModule.FileName)

                     {

                            //Return the other process instance.

                            return process;

                     }

              }

       }

       //No other instance was found, return null.

       return null;

}

public static void HandleRunningInstance(Process instance)

{

       //Make sure the window is not minimized or maximized

       ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);

       //Set the real intance to foreground window

       SetForegroundWindow (instance.MainWindowHandle);

}

[DllImport("User32.dll")] 

private static extern bool ShowWindowAsync(    IntPtr hWnd, int cmdShow);

[DllImport("User32.dll")]

private static extern bool SetForegroundWindow(IntPtr hWnd);

private const int WS_SHOWNORMAL = 1

出处:http://blog.csdn.net/acewang/archive/2004/02/05/17627.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: