如何让应用程序只有一个实例在运行?-.Net技术-3P代码网
繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> 如何让应用程序只有一个实例在运行?

如何让应用程序只有一个实例在运行?

2007-10-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:MyForm.cs using System; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Diagnostics; using System.Reflection; public class OneInstnace { [STAThread] public static vo...

MyForm.cs

using System;

using System.Runtime.InteropServices;

using System.Windows.Forms;

using System.Diagnostics;

using System.Reflection;

public class OneInstnace

{

[STAThread]

public static void Main()

{

//得到正在运行的例程

Process instance = RunningInstance();

if (instance == null)

{

//如果没有其它例程,就新建一个窗体

Application.Run (new Form());

}

else

{

//处理发现的例程

HandleRunningInstance(instance);

}

}

public static Process RunningInstance()

{

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;

}

}

}

//没有其它的例程,返回Null

return null;

}

public static void HandleRunningInstance(Process instance)

{

//确保窗口没有被最小化或最大化

ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);

//设置真实例程为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;

}

做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。

责任编辑:admin
相关文章