确保只有一个程序实例运行(C#)之解决方案

以下是在网上找到的用C#来解决一个程序只运行一个实例的问题,但我觉得在某些情况下并不适用!

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;

public class OneInstnace

    [STAThread]
    public static void Main()
    {
        //Get the running instance.
        Process instance = RunningInstance();
        if (instance == null)
        {
            //There isn't another instance, show our form.
            Application.Run (new Form());
        }
        else
        {
            //There is another instance of this process.
            HandleRunningInstance(instance);
        }
    }
    public static Process RunningInstance()
    {
        Process current = Process.GetCurrentProcess();
        Process[] processes = Process.GetProcessesByName (current.ProcessName);

        //Loop through the running processes in with the same name
        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;
                }
            }
        }

        //No other instance was found, return null.
        return null;
    }


    public static void HandleRunningInstance(Process instance)
    {
        //Make sure the window is not minimized or maximized
        ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);

        //Set the real intance to foreground window
        SetForegroundWindow (instance.MainWindowHandle);
    }

    [DllImport("User32.dll")] 

    private static extern bool ShowWindowAsync(
        IntPtr hWnd, int cmdShow);
    [DllImport("User32.dll")] private static extern bool
        SetForegroundWindow(IntPtr hWnd);
    private const int WS_SHOWNORMAL = 1;
}
posted @ 2006-02-17 20:42  水村  阅读(713)  评论(0编辑  收藏  举报