怎么样判断项目已经启动,避免重复打开程序

dna_xp 2005-04-06 10:07:03
up
...全文
311 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xt0055 2005-04-07
  • 打赏
  • 举报
回复
方法1:
public static void Main(string[] args)
{
  //声明互斥体
  System.Threading.Mutex mutex = new System.Threading.Mutex(false, "ThisShouldOnlyRunOnce");
  //判断互斥体是否使用中
  bool Running = !mutex.WaitOne(0, false);
  if (! Running)
    Application.Run(new FormMain());
  else
    MessageBox.Show("应用程序已经启动!");
}



方法2:

//添加引用
using System.Runtime.InteropServices;

//申明
[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;

//调用
static void Main()
{
  IntPtr hMutex;
  hMutex=CreateMutex(null,false,"test");
  if (GetLastError()!=ERROR_ALREADY_EXISTS)
  {
      Application.Run(new Form1());
  }
  else
  {
      MessageBox.Show("本程序只允许同时运行一个");
      ReleaseMutex(hMutex);
  }
}
xt0055 2005-04-07
  • 打赏
  • 举报
回复
多种方法实现程序只运行一个:
http://xt0055.27h.com/csharp-01-02.htm
sskset 2005-04-06
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topicview.asp?id=3889111
凨叔 2005-04-06
  • 打赏
  • 举报
回复
chinawn(chinawin)的方法最好
conan19771130 2005-04-06
  • 打赏
  • 举报
回复
[STAThread]
static void Main()
{
bool alreadyExist = false;
try
{
System.Diagnostics.Process curP = System.Diagnostics.Process.GetCurrentProcess();
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();
foreach(System.Diagnostics.Process p in ps)
{
if(p.ProcessName.Equals(curP.ProcessName) && p.Id != curP.Id)
{
alreadyExist = true;
}
}
}
catch(System.PlatformNotSupportedException ex){ex.ToString();}
catch(System.InvalidOperationException ex){ex.ToString();}

//如果已经存在,则放弃本进程
if(alreadyExist)
{
MessageBox.Show("程序已经在运行");
return;
}
Application.Run(new frmMain());
}
xjaifly 2005-04-06
  • 打赏
  • 举报
回复
Process[] p1 = Process.GetProcessesByName("启动的文件名");
lxkim 2005-04-06
  • 打赏
  • 举报
回复
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{


//得到正在运行的例程
Process instance = RunningInstance();
if (instance == null)
{
//如果没有其它例程,就新建一个窗体
Application.Run(new Form1());
}
else
{
//处理发现的例程
//HandleRunningInstance(instance);
Application.Exit();//退出

}


}

//得到正在运行的例程
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;
}
chinawn 2005-04-06
  • 打赏
  • 举报
回复
System.Threading.Mutex mutex = new System.Threading.Mutex(false, "ThisShouldOnlyRunOnce");
   bool Running = !mutex.WaitOne(0, false);
   if (! Running)
     Application.Run(new frm());
   else
     MessageBox.Show("應用程序已啟動!");
ivorstar 2005-04-06
  • 打赏
  • 举报
回复
学习。
dna_xp 2005-04-06
  • 打赏
  • 举报
回复
up

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧