当前位置:编程学习 > C#/ASP.NET >>

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"  --------------------编程问答-------------------- 获取当前进程。当前进程有个启动的文件。对比一下就知道了。 --------------------编程问答-------------------- 在注册表里注册启动路径,每次启动前去判断一下。 --------------------编程问答--------------------
引用 3 楼 fangxinggood 的回复:
"strAppName" 改为 "Global\\strAppName"

没明白。。。。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 5 楼 diandian82 的回复:
在注册表里注册启动路径,每次启动前去判断一下。

+
不同路径下多重启动的要求,就得注册表了吧 --------------------编程问答-------------------- 嗯,普遍的做法有三种:
1、原子法(api调用)
2、同步基元-就是楼主那个方法
3、进程查找

说说第三种方法吧:

程序运行时,查看进程中是否次存在此进程(记住,不是你当前的进程)

有的话,就退出,取消显示窗体

没有,就正常运行 --------------------编程问答--------------------
引用楼主 puddingpudding 的回复:
Mutex m_Mutex = new Mutex(true, "strAppName", out CreateStatus);

去掉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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,