"Open with..." 以现有形式

"Open with..." in existing form


我正在创建必须从 Explorator 打开文件的应用程序。当然我可以使用 args 来做到这一点,但 Explorator 会为每个文件打开新的应用程序。例如,我想将 args 发送到现有应用程序 - 不要打开新应用程序。

Explorer 总是会打开您的应用程序的新实例。你需要做的是控制是否有任何其他打开的实例,如果有,将命令行传递给它并关闭你的新实例。

在 .NET 框架中有一些 类 可能对您有帮助,最简单的方法是添加对 Microsoft.VisualBasic 的引用(应该在 GAC 中...并且忽略名称,它也适用于 C#),那么您可以从 WindowsFormsApplicationBase 派生,它会为您完成所有样板代码。

类似于:

public class SingleAppInstance : WindowsFormsApplicationBase
{
  public SingleAppInstance()
  {
      this.IsSingleInstance = true;    
      this.StartupNextInstance += StartupNextInstance;
  }

  void StartupNextInstance(object sender, StartupNextInstanceEventArgs e)
  {
      // here's the code that will be executed when an instance
      // is opened.

      // the command line arguments will be in e.CommandLine
  }

  protected override void OnCreateMainForm()
  {
    // This will be your main form: i.e, the one that is in
    // Application.Run() in your original Program.cs
    this.MainForm = new Form1();
  }
}

然后在您的 Program.cs 中,我们在启动时不使用 Application.Run,而是:

[STAThread]
static void Main()
{
  string[] args = Environment.GetCommandLineArgs();
  var singleApp = new SingleAppInstance();
  singleApp.Run(args);
}