如何在.NET中从控制台应用程序返回值到服务?

3
我有一个.NET服务。
我有一个.NET控制台应用程序。
我想让服务调用Process.Start("consoleapp.exe")并从应用程序返回一些信息,最好只返回一个数字。
我该如何做?
编辑:
我认为这必须是:Process.Start("myapp.exe").ExitCode - 但我如何在控制台应用程序中设置退出代码?

1
使用 Environment.ExitCode 来设置控制台应用程序的退出代码; 顺便问一下,为什么不能在服务应用程序中引用你的控制台代码?你可以不依赖于 Process 类来运行你的控制台代码。 - Rubens Farias
@Rubens - 相信我,我真的做不到! - joshcomley
@Rubens:有些情况下需要进程隔离。 - Dirk Vollmar
5个回答

12
Process p = Process.Start("app.exe");
p.WaitForExit();
int number = p.ExitCode;

在 app.exe 中,您设置了 Environment.ExitCode ...


哦,关键的是要使用WaitForExit()和Environment.ExitCode!我现在会尝试一下,谢谢。 - joshcomley

3

您可以通过更改Main方法来利用Exit Code:

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

to

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

这并不是一种优雅的解决方案,但它可以正常工作。


这是一个观点。我猜这是因为我不太喜欢依赖于退出代码的任意数字来表示有用的东西。然而,我一直依赖于HTTP状态码... - Agent_9191

1

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


1

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

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

第二个选项的优点是,如果以后发现有必要,您可以返回更多的数据。 缺点是需要进行更多的设置工作。

这篇CodeProject文章演示了如何重定向生成进程的标准输出流。


0

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接