【问题标题】:Console.WriteLine sends output to debug in vs.net, but when run from console, I see nothingConsole.WriteLine 将输出发送到 vs.net 中的调试,但是从控制台运行时,我什么也看不到
【发布时间】:2013-03-22 06:36:22
【问题描述】:

我有一个 C# windows 服务。在该服务代码中,我定义 Main() 并捕获各种参数。如果 arg 是“安装”,我会调用代码来安装服务。请注意,当安装 arg 时,我没有运行服务,只是安装它,所以在我看来,这只不过是一个控制台应用程序。

当我在 vs.net 2012 中调试代码时,我在调试窗口中看到了我的所有 Console.WriteLine() 输出。我相信这是因为 VS.NET 将 STDOUT 映射到调试窗口。

但是如果我打开命令提示符并运行命令行myservice.exe install,控制台窗口没有输出。如果我运行myservice.exe install > out.txt,我会在 out.txt 中看到所有输出。发生了什么?如何让 Main() 代码实际将输出发送到控制台窗口?

【问题讨论】:

  • Err... 不是> out.txt 将输出重定向到文件的全部意义吗?如果你只执行myservice.exe install会发生什么?
  • 考虑使用log4netnlog等日志框架轻松切换输出
  • slolife 根据我的经验,请检查您在 VS2012 中的项目设置。我的感觉是,您可能已经选中了禁用 console 视图的选项。
  • 是的,> out.txt 确实会转到文件,但如果我不添加,控制台中就没有输出。
  • 请告诉我disable console view 选项在哪里,我没看到。

标签: c# .net command-line windows-services stdout


【解决方案1】:

这可能是由于您的项目的输出类型;请注意,默认的 Windows 应用程序输出类型不会自动显示控制台窗口。 为此,您可能需要将输出类型更改为控制台应用程序。

【讨论】:

  • 好的,成功了。我想了解更多有关当我将 Windows 服务项目从 Windows 应用程序移动到控制台应用程序时发生的变化的信息? Windows 服务应用程序是否必须是 Windows 应用程序?请注意,我不是通过双击或任何方式启动 exe。我在控制台中输入命令行。我认为任何 Console.WriteLine() 调用都会转到控制台或 STDOUT。我怎样才能以编程方式改变它?
  • Afaik,移动到控制台应用程序只会在程序集的 PE 标头中设置一个标志,这将指示加载程序在加载时创建进程并将其附加到标准流。 Windows 服务不必是 Windows 应用程序。
  • 还有一个trick,它基本上使用几个 Win32 API 来附加到控制台窗口,即使对于非控制台应用程序也是如此,但如果可能的话我会远离。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2017-09-24
相关资源
最近更新 更多