许多Windows应用程序(例如Skype或MSN)不允许您启动多个实例,而是尝试第二次运行它只是让现有版本继续运行。
这通常是以一种简单的方式完成的 - 开始菜单快捷方式是主应用程序周围的“包装”应用程序 - 或者您是否可以使用一些注册表魔法将问题委托给Windows本身?
特别是在这里处理Win32(非托管C ++),但很高兴听到更多通用解决方案,只要它们可以在Windows XP或更高版本上运行。
编辑:this似乎是最好的重复。
答案 0 :(得分:0)
据我记忆,存在系统范围的互斥锁。首次启动时设置Mutex,如果已经设置,则立即退出。
使用CreateMutex()调用一个名为“Global \”的名称应该是技巧。
答案 1 :(得分:0)
可能有更多方法可以做到,但这些是我能想到的第一个。
答案 2 :(得分:0)
我只是检查进程是否已经运行:如果它没有启动应用程序,如果它已经运行,则将窗口置于前台。检查在Main方法中完成。
我使用System.Diagnostics.Process.GetCurrentProcess().ProcessName
获取流程名称,并检查它是否已在运行System.Diagnostics.Process.GetProcessesByName()
。如果有多个进程聚焦第一个进程然后退出。