如何切换到具有特定文档的流程

时间:2012-05-07 08:42:02

标签: c# .net windows

假设我们有一个文本编辑器应用程序,每个表单运行一个单独的进程。该应用程序是单个文档(即没有选项卡或MDI)。

我们有三个表格打开三个文件,A.txt,B.txt和C.txt。现在,用户双击桌面上的B.txt文件。这将启动相关应用程序的新实例。这个已启动的编辑器实例现在应该退出,并将已加载此文件的已经运行的进程放在前面,这样用户就不会以两个单独的形式加载相同的文档。

我怎样才能最轻松地实现这一目标?换句话说,我如何找到哪个进程已经显示文档?

一旦打开文件,文件就不会被打开,所以我不能依赖枚举进程的文件句柄来查找进程。我认为这需要在流程之间进行某种形式的沟通。理想情况下,我正在寻找一个.NET解决方案,但问题实际上与Windows相关/语言无关。

编辑:我应该提一下,由于种种原因,我试图使用单独的流程,而不是在一个流程中运行所有表单。

2 个答案:

答案 0 :(得分:1)

解决此问题的一个好方法是使用互斥锁: Run single instance of an application using Mutex

您可以使用当前应用程序名称+文件名(或其他内容)打开互斥锁,然后在该进程已打开时切换到该进程。

第二种解决方案是使用带有管道绑定的WCF。在服务上调用某种“激活”方法,让应用程序自行激活。 This link提供了一些进行进程间通信的方法。

答案 1 :(得分:1)

我将发布使用的解决方案:当应用程序的实例打开文档时,我会在文档旁边转储一个.pid / .lock文件,其中包含进程的pid。这样我就可以切换到打开文档的进程,或者如果该进程不再存在则清除锁。