C# 程序如何处理文件;以…开头;他们?

C# 程序如何处理文件;以…开头;他们?,c#,windows,winapi,C#,Windows,Winapi,我想知道是否有人能给我指出正确的方向。例如,您知道在大多数IDE中,如果您使用“open with”打开源文件,它会运行程序并将其打开吗?然后如果你打开另一个,它会在同一个过程中在一个新选项卡中打开它 我的问题不是如何向shell命令添加程序,而是: 例如,C#应用程序如何“接收”PDF文件 当运行另一个文件时,应用程序如何在同一进程中打开该文件(不必打开程序实例) 您的程序必须能够与自身的其他实例对话,并说“嘿,我已经打开了,您想做什么,让我来帮您做。”当第二个程序实例启动时,在加载任何接口组

我想知道是否有人能给我指出正确的方向。例如,您知道在大多数IDE中,如果您使用“open with”打开源文件,它会运行程序并将其打开吗?然后如果你打开另一个,它会在同一个过程中在一个新选项卡中打开它

我的问题不是如何向shell命令添加程序,而是:

  • 例如,C#应用程序如何“接收”PDF文件

  • 当运行另一个文件时,应用程序如何在同一进程中打开该文件(不必打开程序实例)


  • 您的程序必须能够与自身的其他实例对话,并说“嘿,我已经打开了,您想做什么,让我来帮您做。”

    当第二个程序实例启动时,在加载任何接口组件之前,它会检查另一个程序实例是否已经运行。如果是这样,它将以某种方式(特定于程序:可以是套接字、进程间中断、共享内存等)与它进行通信,以打开此新文件


    与第一个实例通信后,第二个程序实例将终止,因为不再需要它。

    下面是一篇非常详细的文章,解释了正确的实现:


    此线程包含用于处理命令行参数的讨论和示例(这是文件“传递”到应用程序的方式):

    Microsoft程序通常在shell配置中具有DDEXEC键;这将导致shell向已经运行的应用程序(如果存在)发送DDE命令。

    关系通常是另一种方式:“嘿,有人已经打开了吗?你能帮我做这个吗?”非常正确。并补充问题1的答案:文件名作为参数包含在程序的新实例中,如“C:\WINDOWS\notepad.exe C:\myfile.txt”中。在您的程序中,读取参数字符串以获取文件名。感谢您添加该文件名。我完全错过了问题的那一部分!也许是这样,但我注意到Office2007仍然使用它。我认为这篇博文的最后一条评论很好地总结了这一点: