c#-在后台运行Mono应用程序时能否检测到缺少控制台?

我有一个.NET 4.5控制台应用程序,它使用Mono在CentOS上运行.该代码以:

Console.ReadLine();

如果我以交互方式运行该应用程序,则其行为与预期的一样,但Console.ReadLine()等待键盘输入,但是,如果我使用nohup运行该应用程序以在后台运行它…

nohup mono Program.exe > Program.log &

然后Program.log显示Console.ReadLine()导致一个奇怪的异常:

System.UnauthorizedAccessException: Access to the path "/home/user/[Unknown]" is denied.
  at System.IO.FileStream.ReadData (IntPtr handle, System.Byte[] buf, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0
  at System.IO.FileStream.ReadInternal (System.Byte[] dest, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0
  at System.IO.FileStream.Read (System.Byte[] array, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0
  at System.IO.StreamReader.ReadBuffer () [0x00000] in <filename unknown>:0
  at System.IO.StreamReader.ReadLine () [0x00000] in <filename unknown>:0
  at System.IO.UnexceptionalStreamReader.ReadLine () [0x00000] in <filename unknown>:0
  at System.IO.SynchronizedReader.ReadLine () [0x00000] in <filename unknown>:0
  at System.Console.ReadLine () [0x00000] in <filename unknown>:0
  at Program1.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

我显然可以捕获并安静地忽略该异常,但是我很好奇是否可以检测到我没有控制台并更改应用程序行为的事实吗?

最佳答案
经过一些试验,这似乎为我完成了工作:

if (Console.In is StreamReader) {
    Console.WriteLine("Interactive"); 
} else {
    Console.WriteLine("Background"); 
}

不知道它是否适合所有可能的stdin重定向等等,但是对于我的目的来说它已经足够好了.

转载注明原文:c#-在后台运行Mono应用程序时能否检测到缺少控制台? - 代码日志