将参数传递给正在运行的C#应用

时间:2018-08-17 12:07:05

标签: c#

我有一个C#控制台应用程序。只要我的计算机正在运行,该控制台应用程序就打算在后台运行。此时,该控制台应用程序如下所示:

static void Main(string[] args)
{
  while (true)
  {
    if (args.Length > 0)
    {
      Console.WriteLine("Args received!");
      foreach(var arg in args)
      {
        Console.WriteLine("Arg: " + arg);
      }
    }
  }
}

控制台最初将加载大量数据。这就是为什么我要保持运行而不是总是启动它的原因。尽管如此,一旦它运行,我需要一种从另一个控制台窗口再次“调用”它的方法。

目前,我正在考虑使用

启动上面显示的控制台应用程序
START /B MyConsole.exe
从命令行

。然后,我想在另一个控制台窗口中传递数据,如下所示:

MyConsole.exe --data [some info here]

这根本感觉不对。实际上,我相当有信心这将行不通。尽管如此,我仍需要某种方式来使控制台应用程序运行,并通过命令将数据从另一个控制台窗口传递到该应用程序,如上所示。之所以采用上述方法,是因为我最终与一个第三方应用程序集成,该应用程序让我执行命令行命令。但是,因为我的数据很大,所以我需要先运行该应用程序。

如何在C#中执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:2)

此处的关键字为inter process communication

最简单的方法可能是pipes

尽管不再是最新,最时髦的技术,但我认为让管道在C#中轻松工作的最佳选择是WCF

您始终可以在控制台应用程序中托管其他内容,例如ASP.NET。

保存所有数据的控制台应用程序可能会更好地实现为windows service

如果实际上数据只是文件,则使用memory mapped file可能比进程间通信更容易。

也就是说,进程之间的通信比命令行参数要复杂得多。这些建议中没有一个特别容易实现(至少与控制台应用程序相比),并且很多细节取决于您要执行的操作的细节。

答案 1 :(得分:0)

我将创建自托管的ASP.NET Core Web Api应用程序,该应用程序将公开一些其他终结点,以便您可以根据发送的数据更改参数(将其保存在内存中的任何位置)。在后台,可能有IHostedService的实现,它基于发送的数据循环运行并完成一些工作。