惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
I
InfoQ
C
Check Point Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
Last Week in AI
Last Week in AI
GbyAI
GbyAI
P
Proofpoint News Feed
量子位
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
B
Blog
T
The Blog of Author Tim Ferriss
H
Help Net Security
云风的 BLOG
云风的 BLOG

博客园 - 水村

Backup of css style IIS性能应用程序池设置 查看IIS站点资料占用情况 终于还是要离开了 从ASP过渡到ASP.net遗留的二十大积习 CS中的SQL分页 SQL分页 清理SQL Server日志 修正CS2.0中的日历头显示错误 - 水村 - 博客园 收到群硕的offer了 测试 面向对象设计,ORM,NHIBERNATE杂谈 CSS十大密技 关于博客园的分类设置 Jabber技术概况 想写点什么,却发现心里很空 闲来没事,改了下博客园博客的皮肤 微软笔试归来 今天收到微软HRMM的电话了
确保只有一个程序实例运行(C#)之解决方案
水村 · 2006-02-17 · via 博客园 - 水村

以下是在网上找到的用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;
}