如何在c#.net中检查已运行的exe?

3

如何判断用户每次启动应用程序时,是否已经运行了一个实例。如果未运行,则启动它,否则聚焦于当前实例。我已经尝试了单例应用程序的代码,但是它给出了许多错误,并且无法正常运行。您能否为我提供另一种替代方案?


1
Scott Hanselman在这里回答了:http://www.hanselman.com/blog/CommentView.aspx?guid=d2f676ea-025b-4fd6-ae79-80b04a34f24c - Benny
4个回答

3

您应该使用Mutex类,就像这里所解释的那样:在C#控制台应用程序中实现单例的最佳方法?

编辑:我在我的代码中有这个:

class Program
{
    public const string AppName = "...";
    private static readonly Mutex mutex = new Mutex(true, Program.AppName);

    public Program()
    {
        if (!mutex.WaitOne(TimeSpan.Zero, true))
            throw new ApplicationException("Another instance already running");
    }
}

我已经查看了互斥锁的代码..但是它给我返回一个 "public override void dispose(bool disposing)" 的错误; 没有找到合适的方法来处理dispose..这发生在initialize component中..所以我已经注释掉了那个部分..但我面临的主要错误是在设计视图部分。设计师无法处理第26行的代码:throw new NotImplementedException(); 'InitializeComponent' 中的代码是由设计师生成的,不应手动修改。请删除任何更改并尝试重新打开设计师。 我不能查看form.cs[design],请帮我解决这个问题! - zoya

1

你可以使用一个命名的Mutex

命名系统互斥量在整个操作系统中可见,并且可用于同步进程的活动。您可以通过使用接受名称的构造函数创建表示命名系统互斥量的Mutex对象。


谢谢您的回答。但是,它让我重新构建我的设计视图时出现了错误。它在设计视图上显示了错误。 - zoya
我已经查看了互斥锁的代码,但是它给我带来了错误,其中包括public override void dispose(bool disposing)没有找到适当的方法来处理dispose。这在initialize component上发生了。所以我已经注释掉了那一部分。但我面临的主要错误是在设计视图部分。设计器无法处理第26行的代码:throw new NotImplementedException(); InitializeComponet方法中的代码是由设计器生成的,不应手动修改。请删除任何更改并尝试重新打开设计器。我无法查看form.cs[design]。请帮帮我! - zoya


0

如果您正在使用后台工作器,则不适用于使用互斥锁。如果backgroundWorker正在忙碌,它可以具有多个实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接