我有一个非常简单的Windows Service,它是在vb.net 2008中开发的。当我尝试通过转到工具->附加到进程来调试它时,虽然我看到我的服务已禁用,并且受管类型,但无法选择进程。

如何调试服务?

谢谢

最佳答案

附加到服务应该可以正常工作,所以我不确定为什么不能这样做。取而代之的是,将以下行插入Windows服务的应用程序入口点(或OnStart()方法),以调试模式进行编译,然后启动服务。

System.Diagnostics.Debugger.Break();


启动服务时,将提示您调试过程。选择Visual Studio 2008调试器,该过程将在您的编程断点处加载和停止。按F5重新开始运行。

编辑:

假设您已经构建了服务(发布模式或调试模式-无关紧要),并使用installutil来安装服务,但尚未启动它。只要服务未运行,您就可以继续进行代码更改并重新编译。启动服务时,您的服务将反映您最新的代码更改。如果该服务正在运行,则将无法完全编译该服务,因为exe / dll已在使用中并且无法替换。显然,只需停止服务,重新编译,然后重新启动服务即可。关键是:您不必卸载服务即可修改代码。只需停止它,更改代码,重新编译,然后重新启动即可。

至于调试与发布模式下的调试,我不知道这就是为什么您不能附加到进程中的原因。我确实知道可以调试发行版,但是我不建议这样做,因为如果启用了优化,您可能会遇到遍历代码的问题。我们仅将发布模式调试用作最后的手段。

默认情况下,在调试模式下构建Visual Studio应用程序时,它将放置在项目的bin \ Debug子目录中。在发布模式下进行构建时,可执行文件将放在bin \ Release子目录中。使用installutil安装服务时,唯一重要的是服务所在的位置。对于您的情况,我建议卸载服务的发布模式版本(installutil /u c:\myapp\myapp\bin\release\myapp.exe),放入编程断点,构建调试版本,然后使用installutil安装调试版本(来自bin \ Debug目录)。

对不起,这很long。我希望这很清楚。

07-27 15:16