`
hugh-lin
  • 浏览: 72944 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

[转]实现同时只允许运行一个程序实例

 
阅读更多

方法一:

/// <summary>
/// 从这里开始运行
/// </summary>
[STAThread]
static void Main()
{
    Process instance = RunningInstance();
    if (instance == null)
    {
        //没有实例在运行
        WeatherApp appInstance = new WeatherApp();
        appInstance.StartMainGui();
    }
    else
    {
        //已经有一个实例在运行
        HandleRunningInstance(instance);
    }
}
#region 确保只有一个实例
public static Process RunningInstance()
{
    Process current = Process.GetCurrentProcess();
    Process[] processes = Process.GetProcessesByName(current.ProcessName);
    //遍历与当前进程名称相同的进程列表
    foreach (Process process in processes)
    {
        //Ignore the current process
        if (process.Id != current.Id)
        {
            //Make sure that the process is running from the exe file.
            if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
            {
                //Return the other process instance.
                return process;
            }
        }
    }
    return null;
}
private static void HandleRunningInstance(Process instance)
{
    MessageBox.Show("该应用系统已经在运行!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
    ShowWindowAsync(instance.MainWindowHandle, 1); //调用api函数,正常显示窗口
    SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端。
}
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(System.IntPtr hWnd);
#endregion
 

方法二:

[STAThread]
static void Main(string[] args)
{
    bool isFirst;

    System.Threading.Mutex mutex = new System.Threading.Mutex(true, "WindowAppTest", out isFirst);
    //这里的myApp是程序的标识,建议换成你的程序的物理路径,这样的话如果在一个操作系统中这个标志不会和其它程序冲突
    if (!isFirst)
    {
        MessageBox.Show("Exist");
        Environment.Exit(1);//实例已经存在,退出程序
    }
    else
    {
        Application.Run(new Form1());
    }
}

分享到:
评论

相关推荐

    只允许运行程序的一个实例

    这个需求在VB(Visual Basic)编程中可以通过多种方式实现,标题“只允许运行程序的一个实例”就涉及到了这一技术。下面将详细介绍如何在VB中实现这一功能。 首先,我们需要理解Windows操作系统中的互斥量(Mutex)...

    VC++ 只运行一个程序实例

    本文将详细介绍如何在VC++中实现"只运行一个程序实例"的功能。 首先,我们需要理解Windows操作系统中的进程和线程概念。进程是程序的执行实例,每个进程都有独立的内存空间,而线程是进程内的执行单元。在我们的...

    让QT只运行一个实例

    该文档详细描述了QT平台下,让应用程序只运行一个实例的三种方法,并附有相应的代码。

    VB.net只许一个实例运行.doc

    VB.net 中单实例运行机制是指在同一个系统中只允许一个实例的程序运行,防止多个相同的程序实例同时运行。这种机制有多种实现方式,下面将介绍两种常见的实现方法。 方法一:通过进程名判断 这种方法是通过判断...

    c# 只允许运行一个实例

    在C#编程中,有时我们需要确保我们的应用程序在操作系统上始终只有一个实例在运行。这通常用于控制资源使用,防止多...通过这种方式,你可以确保你的C#应用程序始终只运行一个实例,从而提供更好的用户体验和系统管理。

    delphi_一次只运行一个程序原代码

    4. **互斥量(Mutex)**:在Delphi中,可以使用TMutex组件来实现线程同步,确保只有一个程序实例能够获取Mutex的所有权,从而控制程序的单一实例特性。 5. **进程间通信(IPC)**:通过建立进程间的通信,新启动的...

    ATL只允许一个实例运行

    在“ATL只允许一个实例运行”的场景中,我们通常指的是实现单例模式(Singleton Pattern)来确保应用程序只有一个实例在运行。单例模式是一种设计模式,它保证了类只有一个实例,并提供一个全局访问点。 在ATL中...

    同时运行多个LabVIEW exe实例

    然而,在某些情况下,用户可能希望在同一台计算机上同时运行多个LabVIEW应用程序实例。本文将详细介绍如何通过修改`*.ini`配置文件来实现这一需求。 #### 实现原理 在LabVIEW应用程序中,如果希望允许同一程序的多...

    控制MFC程序只能运行一次

    在MFC(Microsoft Foundation Classes)框架下开发的程序,有时候我们需要确保它只能在用户的计算机上运行一次,以防止多个实例同时打开导致数据冲突或其他问题。这个功能通常被称为单实例应用程序。下面将详细介绍...

    WinCE 只允许运行一个程序例子 C#

    这个名字应该全局唯一,这样即使有多个程序实例尝试创建Mutex,也只能有一个成功。 ```csharp Mutex singleInstanceMutex = new Mutex(false, "MyUniqueAppName"); ``` 2. **检查所有权**:使用Mutex的`WaitOne()`...

    用C#给程序加启动画面并只允许一个应用程序实例运行[借鉴].pdf

    在C#编程中,为程序添加启动画面并确保只有一个应用程序实例运行是常见的需求,这可以提升用户体验并防止资源浪费。以下是对给定文件中涉及的技术点的详细解释: 1. **启动画面(Splash Screen)**: - 启动画面是...

    vc++2005限制只启动一个程序、进程

    在IT行业中,有时我们需要确保特定的应用程序或进程只能在计算机上运行一个实例,避免多个副本同时运行导致资源冲突或不期望的行为。对于开发者来说,这是一个常见的需求,特别是在编写客户端应用程序时,为了保持...

    VC实现只有一个程序运行的功能。

    至于"只允许一个监控程序运行",这可能意味着程序具有监控系统状态或其他特定任务的功能。在这种情况下,确保单例运行能避免重复的监控行为,防止数据冲突和资源浪费。 "PrintMonitor1.0"这个文件可能是程序的主...

    如何使应用程序只运行一个实例(11kb)

    综上所述,创建一个只运行一个实例的应用程序涉及到多种技术和策略,包括进程管理、并发控制、系统资源的使用以及错误处理等。通过合理地运用这些技术,可以确保应用程序始终以最优化的方式运行,提供更好的用户体验...

    c#如何只运行一个实例

    本文详细介绍了如何在C#中实现应用程序只运行一个实例的方法,包括关键代码的解析和P/Invoke API的介绍。通过这种方法,不仅可以提高用户体验,还能有效避免资源浪费。此外,还讨论了一些扩展性的API,可以帮助...

    解决C#程序只允许运行一个实例的几种方法详解

    在C#编程中,有时我们需要确保同一时间只有一个实例的程序在运行,这通常是出于资源管理或者用户界面的一致性考虑。以下将详细讲解两种在C#中实现此功能的方法。 ### 方法一:使用线程互斥变量(Mutex) 线程互斥...

    C++利用MMF判断检测只允许运行一个程序实例

    标题 "C++利用MMF判断检测只允许运行一个程序实例" 涉及到的知识点主要是进程管理和内存映射文件(Memory-Mapped Files, MMF)在C++编程中的应用,尤其是在Windows环境下。这里我们将深入探讨这两个核心概念,并结合...

    C# 只能运行一个winForm进程

    C# 只能运行一个winForm进程是指在C#中实现单实例应用程序,确保同一个应用程序只能运行一个实例,以避免资源浪费和混乱。下面将详细介绍如何实现单实例应用程序。 单实例应用程序的实现 在C#中,实现单实例应用...

    Winform只允许打开一个实例

    ### Winform只允许打开一个实例 在Windows Forms(Winform)应用程序开发中,有时我们希望程序只能运行一个实例,即用户不能重复启动该程序。这种需求常见于许多单例模式的应用场景,例如系统托盘程序、后台服务等...

Global site tag (gtag.js) - Google Analytics