【问题标题】:Pass arguments to running C# app将参数传递给正在运行的 C# 应用程序
【发布时间】:2018-08-17 21:42:58
【问题描述】:

我有一个 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# 中做到这一点?

谢谢!

【问题讨论】:

  • “控制台最初会加载大量数据”——这听起来像是在启动时将数据从文件加载到内存中。你能提供一些关于那部分的细节吗?有了这些信息,答案可能会更有用。
  • 再次阅读问题,我认为这是“X-Y-Problem”的一个实例。您的question 的答案实际上并没有(真正)解决您的problem
  • 最简单的方法来做你想做的事,让一个程序持续运行,但在某些时候向程序发送新数据,是使用套接字。查看stackoverflow.com/questions/20790455/…(以及此人问题的答案)。

标签: c#


【解决方案1】:

这里的关键字是inter process communication

最简单的方法可能是pipes

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

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

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

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

也就是说,进程之间的通信比命令行参数复杂得多。这些建议都不是特别容易实现(至少与控制台应用程序相比),并且很多细节取决于您想要做什么的细节。

【讨论】:

    【解决方案2】:

    我将创建自托管的 ASP.NET Core Web Api 应用程序,该应用程序将公开一些休息端点,以便您可以根据发送的数据更改您的参数(将其保存在内存中的某个位置,无论如何)。在后台可能有一个IHostedService 的实现正在运行并根据发送的数据循环执行一些工作。

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 1970-01-01
      • 2011-10-08
      • 2015-02-12
      • 1970-01-01
      • 2018-10-09
      • 2014-09-28
      • 2012-12-24
      • 1970-01-01
      相关资源
      最近更新 更多