如何将C#控制台应用程序附加到正在运行的Windows服务?

5
我有一个Windows服务,它在执行过程中生成日志。我也对每个写入日志文件的日志消息进行console.writeline调用。但由于这是一个Windows服务,因此控制台写行不可见。
我想编写一个C#控制台应用程序,它可以附加到我的服务(已经运行),并显示进程(我的Windows服务)正在生成的所有console.writeline消息。
更新:日志量非常频繁(每分钟50条消息),我不想在Windows事件日志中拥挤。使用控制台窗口可以帮助查看日志,并在需要时退出。
7个回答

6
从服务中显示窗口并不是一个好主意,因为您需要找到“正确”的会话(Windows允许多个用户登录),而且还要求服务能够访问用户的桌面。
相反,最简单的方法可能是将Console.WriteLine调用更改为Trace.WriteLine。然后,您可以附加到这些跟踪消息,例如使用SysIntenal的DebugView

5

我认为你很难将控制台附加到现有服务中。两个简单的选项:

  1. 写入Windows应用程序日志
  2. 写入文本文件,然后使用wintail或类似工具打开

关于你的更新 - 选择第二个选项最好。


1

我使用cygwin来tail log4net创建的日志文件,这对我很有帮助。

感谢所有的帮助!


1

您可以使服务交互式,这样您将看到控制台窗口,但您总是会看到它,而且我认为如果您关闭它,您将停止服务。

或者,您可以使您的控制台监视器以合理的间隔从日志文件中读取更新,而不是直接进入服务进程。


我认为你的替代方案是更好的解决方案。 - ChaosPandion
我的意见是:长时间以来,Microsoft一直强烈反对服务与桌面的交互,我甚至不确定它是否仍然适用于Windows 7或甚至Vista。 - Igor Korkhov

1
我建议您将日志消息记录到Windows事件查看器中,如果没有强烈的愿望在控制台窗口中显示它们。这个链接会帮助您...

1

通过UDP发送数据并编写一个简单的程序显示数据。
您可以保证异步操作,甚至可以发送到另一个主机。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接