在我当前运行的程序实例中打开文件?

use*_*175 7 c# instance double-click file-association

一个例子:

如果您打开并运行Visual Studio(2010),然后双击PC桌面上的misc*.cs文件,该文件将在当前运行的Visual Studio实例中打开,而不是打开另一个VS实例.

如何让我自己的C#程序模仿这种行为?

换句话说,如果我有一个文件类型,如*.myfile与我的程序相关联,并且用户在Windows资源管理器中双击*.myfile,并且...... 我的程序已经运行 .....它应该打开文件而不启动Windows程序的另一个实例.如果程序未运行,则Windows可以正常启动实例.

请注意,我的程序的多个实例是允许的 - 与Visual Studio相同.

任何建议,将不胜感激 !!

Fra*_*tyx 4

如果您查看注册表中 .cs 文件的注册内容,您会发现它不是 Visual Studio。对于 Express 版本,例如,注册的应用程序是“VCSExpress.exe”,工作室在“WDExpress.exe”中运行。在高级版本中,我认为工作室以“devenv.exe”运行。有趣的是,有两个应用程序:UI 应用程序和一种启动器应用程序。我不知道 VS 是如何做到的,但我可以这样想象:启动器通过任何类型的进程间通信(例如命名管道)与 UI 进行通信。(参见这里)也许可以尝试这个:

  • 启动器应用程序(您的文件扩展名已在其中注册)尝试作为客户端打开到 UI 应用程序的管道。
  • 如果失败,它将启动 UI 应用程序的新实例并将文件名作为参数传递。UI 应用程序启动命名管道的服务器端
  • 如果管道打开成功,即已经有一个 UI 实例在运行,启动器将通过管道将文件名发送到现有的 UI 进程。
  • 将作业传递给 UI 后启动器退出