在Main函数之前添加如下代码,引入kernel32.dll里的函数:
/// <summary>
/// 应用程序的主入口点。只运行一个实例
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public class SECURITY_ATTRIBUTES
{
public int nLength;
public int lpSecurityDescriptor;
public int bInheritHandle;
}
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern int GetLastError();
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern IntPtr CreateMutex(SECURITY_ATTRIBUTES lpMutexAttributes,bool
bInitialOwner,string lpName);
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern int ReleaseMutex(IntPtr hMutex);
const int ERROR_ALREADY_EXISTS = 0183;
然后在Main函数里调用如下:
//***********只运行一个实例*********************************************
IntPtr hMutex;
hMutex = CreateMutex(null,false,"test");
if ( GetLastError() != ERROR_ALREADY_EXISTS)
{ 进行其它操作 }
else
{
//退出运行。因为已经有一个实例运行了。
}