我有一个 .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 应用程序时,我可以检测到缺少控制台吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25180232/