2

我有一个 wpf 应用程序,我通过执行以下操作注册为 URI 方案。

HKEY_CLASSES_ROOT
-->myappname
   -->shell
      -->open
         -->command
            (Default) = "c:\pathtomyapp\app.exe"

极好的!但是,我的应用程序强制一次只能运行一个实例。如何检测我的应用程序已经在运行,例如将其置于前台?

4

1 回答 1

3

您可以使用命名互斥锁来检测该应用程序是否已在运行。或者,如果你有一个 GUI 应用程序,你可以从VisualBasic 的 SingleInstance 应用程序继承你的表单,它也会为你做同样的事情。

  public class SingleInstanceController
    : WindowsFormsApplicationBase
  {
    public SingleInstanceController()
    {
      // Set whether the application is single instance
      this.IsSingleInstance = true;

      this.StartupNextInstance += new
        StartupNextInstanceEventHandler(this_StartupNextInstance);
    }

    void this_StartupNextInstance(object sender, StartupNextInstanceEventArgs e)
    {
      // Here you get the control when any other instance is
      // invoked apart from the first one.
      // You have args here in e.CommandLine.

      // You custom code which should be run on other instances
    }

    protected override void OnCreateMainForm()
    {
      // Instantiate your main application form
      this.MainForm = new Form1();
    }
  }

[STAThread]
static void Main(string[] args)
{    
  SingleInstanceController controller = new SingleInstanceController();
  controller.Run(args);
}

无论何时用 C# 编写代码都没有关系,因为此类可作为 .Net 框架的一部分并适用于所有语言。

这是WPF 的包装器

于 2013-04-05T19:22:19.947 回答