C# 在vs.net中,Console.WriteLine将输出发送到debug,但当从控制台运行时,我什么也看不到

C# 在vs.net中,Console.WriteLine将输出发送到debug,但当从控制台运行时,我什么也看不到,c#,.net,command-line,windows-services,stdout,C#,.net,Command Line,Windows Services,Stdout,我有一个C#windows服务。在该服务代码中,我定义了Main()并捕获了各种参数。如果arg是“install”,我将调用代码来安装服务。请注意,在安装arg时,我并没有运行服务,只是安装了它,所以在我看来,这只是一个控制台应用程序 在vs.net 2012中调试代码时,我会在调试窗口中看到所有Console.WriteLine()输出。我认为这是因为VS.NET将标准输出映射到调试窗口 但是,如果打开命令提示符并运行命令行myservice.exe install,则控制台窗口没有输出。如

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

在vs.net 2012中调试代码时,我会在调试窗口中看到所有Console.WriteLine()输出。我认为这是因为VS.NET将标准输出映射到调试窗口


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

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

Err。。。
>out.txt
将输出重定向到文件的目的不是很重要吗?如果你只是执行<代码> MyService .EXE安装< /COD>会发生什么?考虑使用Log4NET、Nlog或其他日志框架来轻松切换OutsLoLIFE从我的经验中,请检查VS2012中的项目设置。我的感觉是,您可能已经选中了禁用
控制台
视图的选项。是的,
>out.txt
确实会转到该文件,但是如果我不添加该选项,控制台中就没有输出。请让我知道
禁用控制台视图
选项在哪里,我看不到。好的,这就成功了。我想了解更多有关将windows服务项目从windows应用程序移动到控制台应用程序时所做更改的信息?windows服务应用程序是否需要是windows应用程序?请注意,我不是通过双击或其他方式启动exe的。我在控制台中输入命令行。我认为任何Console.WriteLine()调用都会转到Console或STDOUT。我如何通过编程更改它呢?好的,移动到控制台应用程序将在程序集的PE头中设置一个标志,这将指示加载程序在加载时创建进程并将其附加到标准流。Windows服务不需要是Windows应用程序。还有一个基本上使用两个Win32 API连接到控制台窗口的应用程序,即使是非控制台应用程序,但如果可能的话,我会远离它。