繁体   English   中英

如何使用可执行文件打开文件?

[英]How to open a file with an executable already open?

我有一个C#/ WPF项目,它代表一个dbf编辑器,该编辑器允许您以3种方式打开文件:-在工具栏中使用apposit按钮-拖放-双击文件现在我使用一个TabControl,其中包含每个打开的dbf。 我可以使用内部按钮来处理它,并将添加项拖动到容器中。 如果我双击打开一个文件,并且有一个打开的实例,我想将其添加到容器中,而是打开一个新实例。 我的代码:

  • 应用程式

公共部分类应用程序:应用程序{

private static Editor mainWindow = null;
protected override void OnStartup(StartupEventArgs e)
{
    Editor mainWindow = new Editor(e.Args);
    mainWindow.Show();
}

}

  • 编辑:

    公共局部类编辑器:Window
    {

      ChooseMessage.Choose choose; public Dictionary<int, DBFStructure> ds; string DbfName; private string[] OldNew; public Editor(string[] e) { InitializeComponent(); ds = new Dictionary<int, DBFStructure>(); OldNew = new string[2]; choose = ChooseMessage.Choose.OK; if (e.Length > 0) if (File.Exists(e[0]) && e[0].EndsWith(".dbf", StringComparison.InvariantCultureIgnoreCase)) EffOpen(e[0]); } private void dbf_Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop, true) == true) { string filename = ((string[])e.Data.GetData(DataFormats.FileDrop, true))[0]; if (File.Exists(filename) && filename.EndsWith(".dbf", StringComparison.InvariantCultureIgnoreCase)) EffOpen(filename); } } .... } 

我为显示代码表示歉意,但无法正确设置。

我的问题是从上一个打开的编辑器实例中拦截dbf的打开并将其添加到controltab中,否则创建一个新实例。

PS EffOpen(filename)表示通过传递fil名称,将其加载并将其添加到容器中的方法

谢谢大家

双击打开文件时,Windows将启动一个新的应用程序实例。 这是设计使然,您不能更改此设置。

在这个新实例中,您没有直接引用第一个应用程序实例的对象,因此您不能仅将正在打开的文件添加到第一个实例的TabControl

您需要这样实现:

  • 由于您可以通过双击打开文件,因此您的应用程序可以使用命令行参数来处理文件-很好
  • 您需要一种检查是否已经在运行实例的方法-使用具有专用且唯一名称的Mutex来执行此操作; 尝试在应用启动时创建Mutex并检查Mutex(bool, string, out bool)构造函数的out参数-如果为false ,则已经有一个实例
  • 您需要一种方法来告诉已经在运行的实例它需要打开作为命令行参数传递给第二个实例的文件; 使用更适合您的任何过程方法: NamedPipe是一种非常简单的方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM