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

转载 2004年07月22日 20:09:00
[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

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

让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建前,有窗口的程序在窗口创建前,检查系统中是否已经设置了某些特定标志了,如果有说明已经有一个实例在运行了,则当前程序通知用户怎样怎样...
  • u011981018
  • u011981018
  • 2015年01月29日 16:43
  • 578

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

http://www.cnblogs.com/lxshanye/archive/2013/05/22/3093182.html   HANDLE m_hMutex = ::CreateMutex(...
  • strong0511
  • strong0511
  • 2017年06月23日 10:18
  • 175

JAVA程序单实例运行的实现方法

Java程序单个实例运行的方法总结。
  • fanxiaobin577328725
  • fanxiaobin577328725
  • 2016年07月12日 22:47
  • 794

应用程序每次只能运行一个实例(C#)

有时根据实际需要可能希望应用程序每次只有一个实例在运行,当再次点击同一个应用程序的可执行文件时并不生成一个新的实例,而是将相应的用户界面激活,显示在屏幕最前面。要解决这个问题主要是考虑如何判断应用程序...
  • CNHK1225
  • CNHK1225
  • 2015年01月14日 12:31
  • 887

应用程序只运行一个实例

方法一、 BOOL CXXXApp::InitInstance() { // keep only one program running HANDLE hSem = CreateSemaphore...
  • kadinu80
  • kadinu80
  • 2013年08月29日 15:03
  • 603

C#应用程序只允许运行一个实例,多次运行的时候激活当前实例,显示其界面

很多时候,我们开发的程序,需要单例运行的的功能,即整个应用程序只允许同时运行最多一个实例,重复运行的时候,激活当前实力,显示其界面。   在C#程序中,其解决方案有多重,可以参照Charles Ch...
  • honantic
  • honantic
  • 2015年08月17日 15:04
  • 21145

让Qt应用程序只运行一个实例

QString serverName = QCoreApplication::applicationName(); QLocalSocket socket; socket.connectToSer...
  • langya121
  • langya121
  • 2014年09月22日 18:37
  • 590

linux 只启动一个进程实例

linux 只启动一个进程实例 ==================================================================== 我使用的是第一种方...
  • lk07828
  • lk07828
  • 2015年05月15日 11:10
  • 1031

使Qt 程序只能运行一个实例的3种方法

1. 共享内存的方法 Unix: QSharedMemory "owns" the shared memory segment. When the last thread or process th...
  • robertkun
  • robertkun
  • 2013年01月18日 21:41
  • 7107

利用两个BrocastReceiver来保证同时只有一个实例在运行

利用两个BrocastReceiver来保证同时只有一个实例在运行
  • leelizebo
  • leelizebo
  • 2016年06月28日 12:05
  • 339
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:保证应用程序只有一个实例在运行
举报原因:
原因补充:

(最多只允许输入30个字)