C# 中判断程序是否启动使用Mutex使用异常

【背景】

在最近的一个项目中,我负责客户端模块的工作。需求要求,在启动客户端时需要判断客户端是否已经启动(单例)。于是我决定使用Mutex来实现此功能,代码如下:

            bool initiallyOwned = true;
            bool isCreated;
            Mutex m = new Mutex(initiallyOwned, "xxxxx", out isCreated);
            if (!(initiallyOwned && isCreated))
            {
                Common.MessageEx.Msg("客户端已经启动!");
                return;
            }

此功能在大多数情况下,能够很好的实现判断客户端是否已经启动。

【新的需求】

NND,有一天来了一个变态(BT)的需求,客户端主窗体弹出子窗体后,子窗体需要支持最小化,子窗体最小化的同时主窗体需要同时最小化,主窗体还原时子窗体还原(我真想说一句,你大爷的,操作系统也没有实现过这么BT的需求呀)。

【Mutex异常】

  经过一番折腾,终于实现了BT的需求。偶然一次操作,当我在客户端弹出子窗体后,将系统最小化,然后我又去运行启动一个新的客户端。眼前一幕把我吓尿了————NND尽然能够正常启动。

【解决】

最后程序调试,我发现当客户端已经启动时,并且处于上述操作过程中,再次启动客户端,Mutex是能够创建的。所以我只能做如下处理来实现(单例):

       int i = 0;
            Process[] pros = Process.GetProcesses();
            foreach (Process p in pros)
            {
                if (p.ProcessName.Equals("xxxxx"))          {           ++i;          }          if (i > 1) { break; }       } 

          if (i>1)           {       Common.MessageEx.Msg("客户端已经启动!");       return;       }

【Mutex为什么不能判断】

至于Mutex为什么不能判断,暂时还没有想通,希望通过此博客与大家共同交流!!!

C# 中判断程序是否启动使用Mutex使用异常

时间: 2024-10-10 17:39:08

C# 中判断程序是否启动使用Mutex使用异常的相关文章

iOS 判断程序第一次启动

在appdelegate.m中找到 “application:didFinishLaunchingWithOptions:”方法, 添加以下代码: if (![[NSUserDefaults standardUserDefaults] boolForKey:@everLaunched]) { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@everLaunched]; [[NSUserDefaults standardUser

VC++编程中为程序加入启动画面功能

 如何为自己的程序加入启动画面 观察我们平常使用的软件,当我们双击软件的时候,会在主界面出现前,先行出现一个启动画面,由于前一阵子写了一个基于对话框的程序,亲自实验了下,今天就为大家简单的介绍下,在我们的程序中如何实现增加启动画面的功能. 在这里说明说明一下,我们平常使用的编译器是VS2010 或者是VS2012,在早一点的版本中,例如vc6.0中,加入启动画面这一功能,编译器已经为我们封装好,我们直接使用他所提供的CSplashWnd类就行了.单击[Project\Add to Project

Android中判断app何时启动和关闭的技术研究

存在的问题 Android开发中不可避免的会遇到需要检查app何时进入前台,何时被用户关闭.奇怪的是,要达到这个目的并不容易.检查app第一次启动并不难,但要判断它何时重新打开和关闭就没有那么简单了. 这篇文章将介绍一种判断app打开,重新打开和关闭的技术. 让我们开始吧 判断一个app打开和关闭的关键在于判断它的activities是否正在前台显示.让我们先从简单的例子开始,一个只有一个activity的app,而且不支持水平模式.这样想要判断app是打开还是关闭只需要检查activity的o

怎么在某个控制器中判断程序是否在前台或后台

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appHasGoneInForeground:) name:UIApplicationWillEnterForegroundNotification object:nil]; //别忘了删除监听 [[NSNotificationCenter defaultCenter] removeObserver:self]; UIApplicationDidEn

C#判断程序是由Windows服务启动还是用户启动

在Windows系统做网络开发,很多时候都是使用Windows服务的模式,但在调度阶段,我们更多的是使用控制台的模式.在开发程序的时候,我们在Program的Main入口进行判断.最初开始使用Environment.UserInteractive属性,在系统不系统服务的交互模式时,程序运行是正常的,但试过有Win7下,系统允许交互模式,结果在服务启动的时候,跳转到控制台的模式了,服务启动不起来.只能在服务的调用方式下带参数,然后在Main的参数中判断是否为服务方式.这在一般的情况下是可以解决问题

Wix安装程序中判断是否安装的.net framwork 4.5

Wix安装程序中判断是否安装的.net framwork 4.5 <PropertyRef Id="NETFRAMEWORK40FULL"/> <PropertyRef Id="NETFRAMEWORK45"/> <Condition Message='This setup requires Microsoft .NET Framework 4.0 Full package or greater needs to be installe

判断程序是否是第一次启动?

如何判断程序是否为第一次启动,并实现第一次启动时实现用户导航的页面.在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions里实现如下代码 //判断程序是否是第一次启动    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"everLaunched"])    

普中PZISP自动下载软件出现应用程序无法启动,因为应用程序的并行配置不正确的问题

普中的自动下载软件是用Visual C++开发的Windows应用程序,因此在运行时需要库的支持才能在没有安装Visual C++的计算机上正常运行,也可以在开发软件时选择"在静态库中使用 MFC",从而将调用的库函数的代码嵌入应用程序,避免对运行时库的依赖. 在安装vcredist_x86运行库后,问题得到有效解决: 安装运行库后,软件可以运行了. 因此,在以后的学习中如果遇到应用程序无法启动的问题,要考虑是否是因为程序的运行支持库文件不全引起的. 在平时的学习中遇到问题,首先是根据

程序无法启动此应用程序,因为计算机中丢失glut32.dll

原文链接http://blog.csdn.net/tyxkzzf/article/details/40789901 今天打开一个OpenGL源码,各种修改之后想要运行看一下效果,结果在我的开发环境下出现缺少相应的dll库: Windows7 64位+VS2010 提示:程序无法启动此应用程序,因为计算机中丢失glut32.dll...... 果断查看System32文件夹,发现有这个文件,那就不明白了,为什么还是找不到呢,不合理啊. 一时半会儿没找到,为了尽快看到代码运行的效果,就把这个dll拷