现有形式的“以...开放”

时间:2016-04-22 14:43:16

标签: c# explorer open-with


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

1 个答案:

答案 0 :(得分:1)

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