2009-10-13 54 views
5

我在Windows服务中使用Microsoft Log Parser。该程序工作在一个普通的网页,但是当我把代码放入Windows服务中时,它不起作用。我在Windows服务中放入了Breakponts,但是当我运行代码时,程序不会停在断点处。因此,通过我的故障排除,我将问题缩小到Log Parser软件和Linq。所以无论是Linq还是日志解析器软件都会造成这个问题。你们有什么想法吗?什么是在Visual Studio 2008中调试Windows服务程序的最佳方法

回答

2

根据程序的运行方式,我在过去做了很多这样的事情。我认为最简单的方法是在Debugger.Launch()周围配置一个if #DEBUG预处理器指令,这样当您构建项目时,Debugger.Launch()调用将不会被编译到程序集中。

我们完成此任务的一种方法是使用System.Windows.Forms.MessageBox.Show(“attach”),它允许我们在显示“attach”对话框时手动连接到调试器。

我不喜欢的最后一种方法是根据传入的命令行参数更改服务的行为。基本上选择不使用ServiceBase.Run启动服务,只要特定参数被触发,但调用类它封装了服务的行为/主要功能。

+1

重申最后一点 - 我相信你也可以检查'Environment.UserInteractive'。 –

2

你想调试OnStart方法吗?如果是这样,您可以使用System.Diagnostics.Debugger.Launch()System.Diagnostics.Debugger.Break()方法在on start方法运行时获得附加调试器的机会,否则,您总是会迟到并附加调试器。

2

我认为胖猫建议将调试器附加到服务过程听起来是对的。如果仍然不起作用,请尝试使用Debug.WriteLineDebugView

相关问题