检测它是否是应用程序 c# 的最后一个实例



我有程序,我必须启动多个实例。

但是,如果当前实例是最后一个实例,我必须执行一些操作。

有什么办法吗?如果是,那么我该怎么做?

if(Process.GetProcessesByName("yourprogram").Length == 0)
{
    // It's the only instance!
}

您可以获得与当前进程同名的进程列表并采取相应的措施;

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("Name.of.process.here");
if(processes.Length == 1)

最好的方法可能是计算正在运行的进程的数量

var count = System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count();

在 Jeffrey Richter 的 CLR via C# 一书中,这是一个使用该类的示例Semaphore

using System;
using System.Threading; 
public static class Program {
    public static void Main() {
        bool created; 
        using(new Semaphore(0, 1, "SomeUniqueStringIdentifyingMyApp", out created)) {
            if(created) {
                //This thread created kernel object so no other instance of this app must be running
            } else {
                //This thread opens existing kernel object with the same string name which means 
                //that another instance of this app must be running. 
            }
        }
    }
}

您应该注意,所有其他应答者不对应用程序实例进行排序。

您希望如何订购您的应用程序?到开始时间?如果是这样,则可以对代码使用独立存储,在其中存储应用程序实例上次启动的日期,并将其与此当前实例的开始日期进行比较(在应用程序中创建静态属性)。另请参阅:MSDN 文章。

如果您不想对应用程序进行排序,只需使用 Process.GetProcessesByName,只需为您的应用程序传递一个名称即可。

请注意,调试模式进程名称与发布模式进程名称不同

相关内容

最新更新