当前位置: 首页 > 编程语言 > C#

如何检查另一个应用程序实例是否正在运行Share

时间:2023-04-11 11:14:12 C#

如何检查另一个应用程序实例是否正在运行我用C#编写了一个应用程序,它位于我们的服务器上。当有人需要使用它时,应用程序直接从服务器启动,从局域网中任何连接的PC。有没有一种简单的方法来检查有多少实例正在运行?或者更确切地说,除了我开始的那个之外还有其他实例吗?编辑:这不是所提供帖子的副本,因为我不想确保只有一个实例在运行(如“不要同时运行超过1个应用程序”),而只是为了检查,如果除我之外的其他人正在运行它(在正常情况下,它必须同时在多台PC上运行)没有简单的方法可以知道您的程序实例正在具有相同二进制文件的特定机器上运行-您的程序需要以某种方式向某个共享位置报告“我正在运行”,而不是检查其他实例是否正在运行。如果您只需要检查单个实例,您可以从同一位置打开文件,如果多个实例尝试打开它,它将失败。将共享位置选项耦合到实例计数:请注意,这也意味着如果程序终止,则共享位置中可能没有此特定实例要完成的报告。有几种方法可以做到这一点,例如,使用套接字、数据库的东西。最简单(但不安全)的方法可能是使用文件来记录实例数,您可能想要改进它。voidWriteToFile(intx,intmillisecondsTimeout){for(;;Thread.Sleep(millisecondsTimeout))try{using(varfile=File.Open("instances.bin",FileMode.OpenOrCreate)){varbytes=newbyte[大小(整数)];file.Read(bytes,0,sizeof(int));varinstances=x+BitConverter.ToInt32(bytes,0);如果(实例>-1)file.Write(BitConverter.GetBytes(实例),0,sizeof(int));休息;}}catch(IOExceptionex){}}voidIncrement(){//在程序启动时调用WriteToFile(1,1000);}voidDecrement(){//在程序退出时调用WriteToFile(-1,1000);请注意,文件“instances.bin”应该是位于服务器上的文件。一旦您的程序意外终止,您可能还想编写一个AppDomain.CurrentDomain.UnhandledException处理程序。通常,为了只允许应用程序的N个并发实例,您可以使用命名信号量,因为它们在整个系统中都是可见的。尝试创建一个命名信号量,其参数指定应用程序启动时允许的实例数。如果WaitOne失败,则意味着所有实例都在使用中,因此您退出应用程序。这是示例代码(在我的脑海中,掩盖了一些微妙的问题,没有错误处理等)constintMAX_INSTANCES=2;//设置所需的并发实例数vars=newSemaphore(MAX_INSTANCES,MAX_INSTANCES,"unique_name_of_semaphore");if(s.WaitOne(0))//零超时-如果耗尽则立即退出{//很好,我们在运行应用程序Application.Run(newForm());//运行应用程序-一个winforms示例s.Release();//释放信号量}else{//哎呀,筋疲力尽了:MessageBox.Show("太多实例正在运行!!");您还可以使用Semaphore.OpenExisting()的变体,具体取决于您的应用程序需要。编辑:哎呀,只是注意到您实际上并不需要它,而是对在不同机器上运行的实例进行身份验证——如果没有向服务器报告的机制,这会更难。以上是C#学习教程:如何查看是否有其他应用实例在运行。分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: