c# winform 防止多重启动,在同一路径下不能多重启动,在不同路径下可以重复启动
c# winform 防止多重启动,效果 在同一路径下不能多重启动,在不同路径下可以重复启动下面代码无法实现 在不同路径下多重启动的要求,哪位高手还有别的方法。
bool CreateStatus = false;
string strAppName = string.Empty;
strAppName = Application.ExecutablePath;
Mutex m_Mutex = new Mutex(true, "strAppName", out CreateStatus);
if (CreateStatus == false)
{
MessageBox.Show("不能多重启动");
return;
} --------------------编程问答-------------------- learn --------------------编程问答-------------------- 程序每次运行都在当前地址创建(如果没有)或访问一个配置文件,配置文件记录当前路径的应用程序是否已运行 --------------------编程问答-------------------- "strAppName" 改为 "Global\\strAppName" --------------------编程问答-------------------- 获取当前进程。当前进程有个启动的文件。对比一下就知道了。 --------------------编程问答-------------------- 在注册表里注册启动路径,每次启动前去判断一下。 --------------------编程问答--------------------
没明白。。。。 --------------------编程问答-------------------- --------------------编程问答--------------------
+
不同路径下多重启动的要求,就得注册表了吧 --------------------编程问答-------------------- 嗯,普遍的做法有三种:
1、原子法(api调用)
2、同步基元-就是楼主那个方法
3、进程查找
说说第三种方法吧:
程序运行时,查看进程中是否次存在此进程(记住,不是你当前的进程)
有的话,就退出,取消显示窗体
没有,就正常运行 --------------------编程问答--------------------
去掉strAppName前后的引号啊 --------------------编程问答-------------------- 去掉了引号,怎么运行是总是出现,不认识呢,是不是那个参数不能写成全路径啊。 --------------------编程问答-------------------- main函数写上
try
{
Process[] pr = System.Diagnostics.Process.GetProcessesByName("窗体的进程名");
int count = 0;
foreach (Process closePr in pr)
{
if (closePr.ProcessName.Equals("窗体的进程名"))
{
++count;
}
}
if (count > 1)
{
return;
}
}
catch (SystemException ex)
{
} --------------------编程问答-------------------- 既然你已经判断重复了,那就在系统枚举你这个程序,
应该可以找到两个,这个时候,你可以得到这个程序的启动路径,
你判断一下就好了。
补充:.NET技术 , C#