无法附加Windows服务进程

5 debugging windows-services visual-studio-2008

我有一个非常简单的Windows服务,它是在vb.net 2008中开发的.当我尝试通过工具调试它 - >附加到进程虽然我看到我的服务它被禁用和管理类型我无法选择进程.

我如何调试我的服务?

谢谢

小智 15

如果您遵循MSDN中的基本Windows服务创建"教程",您将遇到此问题.您将在"附加到进程"对话框中看到MyNewService.vshost.exe,但它将被禁用.要查看您的服务,您必须同时检查"显示所有用户的进程"和"在所有会话中显示进程"以查看您的服务.如果您按照教程中的说明操作,则服务在"SYSTEM"用户名下运行,并且服务通常在不同的会话中运行.

检查这两个框(并忽略MyNewService.vshost.exe)后,您将看到My​​NewService.exe,您可以选择并调试它.

当然,在服务遇到断点之前不会发生任何事情.您可以创建OnPause(如OnContinue)处理程序,但为了能够暂停您的服务,您需要在服务上设置CanPauseAndContinue标志(与AutoLog标志相同的对象).

另外,在我对64位机器的测试中,仅重新编译项目不允许成功调试.即使编译和重新安装也无效.我不得不重新编译项目,然后重新编译安装项目,然后重新安装设置以便能够调试服务.

最后,可以通过"控制面板"中"管理工具"下的"事件查看器"查看事件日志.当按照MSDN教程中的描述创建时,"MyNewLog"位于"应用程序和服务日志"下.


Mat*_*vis 10

附加到服务应该工作,所以我不知道为什么你不能.取而代之的是,在Windows服务(或OnStart()方法)的应用程序入口点插入以下行,在调试模式下编译,然后启动该服务.

System.Diagnostics.Debugger.Break();
Run Code Online (Sandbox Code Playgroud)

启动服务时,系统将提示您调试该过程.选择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目录).

对不起,这是啰嗦.我希望这很清楚.