【问题标题】:How can I pass command-line arguments to an already-running process?如何将命令行参数传递给已经运行的进程?
【发布时间】:2011-05-31 15:56:27
【问题描述】:

我正在编写一个联系人管理程序。我知道如何读取命令行参数,并根据我的发现执行不同的方法。

例如,program.exe "John Doe" 将启动程序的新实例并打开它找到的第一个名为 John Doe 的联系人,program.exe -s John 将启动程序的新实例并搜索名为“John”的联系人,而只需运行program.exe 将打开一个带有空白搜索屏幕的程序的新实例。

不过,我只想运行该程序的一个实例。所以当另一个程序调用program.exe "John Doe"时,如果已经有一个进程在运行,参数将被传递给那个进程并切换到新的搜索而不是打开一个新窗口。

我知道这需要查找以前运行的进程和进程间通信,但我在 .Net 中并没有做太多的事情,并且在朝着正确的方向开始或找到任何关于特定主题的好教程时遇到了麻烦。

【问题讨论】:

  • 您是“拥有”program.exe,还是属于第三方?
  • program.exe 是我正在编写的程序。它只是还没有名字。所以是的,我拥有它。
  • 我没找到。哈桑汗在下面找到它。

标签: .net wcf


【解决方案1】:

http://www.hanselman.com/blog/TheWeeklySourceCode31SingleInstanceWinFormsAndMicrosoftVisualBasicdll.aspx

Visual basic dll 有一个 WindowsFormsApplicationBase,它具有 StartupNextInstance 事件,您可以在其中获取第二个实例的参数,并且第二个实例可以在检测到其他实例时杀死自己。

这个问题已经问过了C# : how to - single instance application that accepts new parameters?

【讨论】:

    【解决方案2】:

    也许这篇文章可以帮助你。 See Here , also using IPC Channel

    【讨论】:

      【解决方案3】:

      一种方法是让 program.exe 托管 WCF 服务(您似乎已经从标签中猜到了)。然后,当另一个实例使用命令行参数启动时,它将成为该服务的 WCF 客户端,并将参数发送到服务,然后退出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-26
        • 2012-09-01
        • 2017-05-30
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 2015-02-12
        • 2016-06-29
        相关资源
        最近更新 更多