【问题标题】:How do I return a value from a console application to a service in .NET?如何将值从控制台应用程序返回到 .NET 中的服务?
【发布时间】:2024-01-23 04:32:01
【问题描述】:

我有一个 .NET 服务。

我有一个 .NET 控制台应用程序。

我想要类似于调用Process.Start("consoleapp.exe") 的服务并从应用程序返回一些信息,理想情况下只返回一个数字。

我该怎么做?

编辑:

我想它一定是:Process.Start("myapp.exe").ExitCode - 但是如何在控制台应用程序中设置退出代码?

【问题讨论】:

  • 要设置您的控制台应用程序退出代码,请使用 Environment.ExitCode;顺便说一句,为什么不能在服务应用程序中添加对控制台代码的引用?您可以在不依赖 Process 类的情况下运行控制台代码
  • @Rubens - 相信我,我做不到!
  • @Rubens:有些场景需要进程隔离。

标签: .net windows-services console-application


【解决方案1】:
Process p = Process.Start("app.exe");
p.WaitForExit();
int number = p.ExitCode;

然后在 app.exe 中设置 Enviroment.ExitCode...

【讨论】:

  • 啊,关键的东西有 WaitForExit() 和 Environment.ExitCode!我现在就试试这个,谢谢..
【解决方案2】:

您可以通过更改 Main 方法来使用退出代码

public void Main(string[] args){return;}

public int Main(string[] args){return 0;}

不是一个优雅的解决方案,但它确实有效。

【讨论】:

  • 说到点子上了。我想这是因为我不喜欢依赖任意数量的退出代码来表示有用的东西。然后我又一直依赖 HTTP 状态码...
【解决方案3】:

可以通过标准ExitCode 机制返回任意数字。你只需要Start()一个进程,然后WaitForExit(),然后得到ExitCode的值。

【讨论】:

    【解决方案4】:

    您可以使用退出代码,可以从Main函数返回或通过Environment.ExitCode设置。

    另一种选择是让您的 ConsoleApp 写入标准输出流,并将输出重定向到您的主应用程序。

    第二个选项的优点是可以返回比单个整数更多的数据,如果以后发现有必要的话。缺点是设置起来有点麻烦。

    这个CodeProject article 演示如何重定向衍生进程的标准输出流。

    【讨论】:

      【解决方案5】:

      控制台应用可以设置退出代码。

      控制台应用可以通过以下任一方式设置其退出代码:

      1. 致电System.Environment.Exit(exitcode),或
      2. main 函数返回一个int。

      ExitCode 属性(属于System.Diagnostics.Process 类)允许服务进程检查控制台应用的退出代码。

      【讨论】:

        最近更新 更多