c# - 在后台运行 Mono 应用程序时,我可以检测到缺少控制台吗?

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

相关文章:

c# - 从字符串到 guid 的转换无效 - 如何解决此问题?

c# - 使用 VSTO 在 Word 中动态创建的表格后插入文本

c# - 序列化一个通用类型的 FaultException

c# - 如何获取 Mono Xamarin Android 应用程序路径文件夹?

c# - 无论如何并行产量 c#

c# - 如何将 float 和泛型相乘?

c - 在 Ubuntu 上安装的 TeamCity 服务器上构建 Visual Studio 项目

asp.net-mvc-3 - 是否可以在Mono 2.10下运行ASP.NET MVC 3项目?

mono - 配置单声道应用程序的首选方法是什么

c# - 为什么这个 Explicit P/Invoke 不起作用?