2

次のようにして、URIスキームとして登録したwpfアプリがあります。

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

素晴らしい!ただし、私のアプリケーションでは、一度に実行できるインスタンスは 1 つだけです。アプリが既に実行されていることを検出して、たとえばフォアグラウンドに移動するにはどうすればよいですか?

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

このクラスは .Net フレームワークの一部として、またすべての言語で使用できるため、C# でコードを記述しても問題ありません。

そして、これがWPFのラッパーです

于 2013-04-05T19:22:19.947 に答える