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

推荐订阅源

F
Fortinet All Blogs
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
WordPress大学
WordPress大学
Jina AI
Jina AI
GbyAI
GbyAI
aimingoo的专栏
aimingoo的专栏
N
Netflix TechBlog - Medium
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
月光博客
月光博客
博客园 - Franky
Y
Y Combinator Blog
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
雷峰网
雷峰网
小众软件
小众软件
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 水村

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;
}