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

[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

Published At
Categories with Web编程
Tagged with
comments powered by Disqus