c++ - 如何调试 Windows 服务

标签 c++ windows windows-services window servicecontroller

我已经使用 Code Project 创建了一个 Windows 服务文章。我可以使用 -i 和 -d 开关安装和删除服务。

我可以在services.msc中看到服务,但是当我启动服务时它什么也没做。下面我将提供服务主要代码:

void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
{
  DWORD status;
  DWORD specificError;
  m_ServiceStatus.dwServiceType = SERVICE_WIN32;
  m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
  m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
  m_ServiceStatus.dwWin32ExitCode = 0;
  m_ServiceStatus.dwServiceSpecificExitCode = 0;
  m_ServiceStatus.dwCheckPoint = 0;
  m_ServiceStatus.dwWaitHint = 0;

  m_ServiceStatusHandle = RegisterServiceCtrlHandler("Service1", 
                                            ServiceCtrlHandler); 
  if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0)
  {
    return;
  }
  m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
  m_ServiceStatus.dwCheckPoint = 0;
  m_ServiceStatus.dwWaitHint = 0;
  if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus))
  {
  }

  bRunning=true;
  while(bRunning)
  {

    Sleep(150000);
    ShellExecute(NULL, "open", "C:\\", NULL, NULL, SW_SHOWNORMAL);

  }
  return;
}

但是当我启动服务时,它既不休眠也不启动资源管理器。我错过了什么吗?

最佳答案

Ferruccio 将调试器附加到正在运行的服务的建议是一个很好的建议,包括一个作为控制台应用程序运行的选项的建议也是如此(尽管这对您的情况没有帮助)。

要调试启动代码,可以调用DebugBreak()在启动代码的开头。这将启动调试器并在此时暂停执行您的服务。进入调试器后,设置所需的任何断点,然后继续执行。

关于c++ - 如何调试 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5064327/

相关文章:

如果可能,C++ 通过右值引用传递参数,否则复制左值引用

c++ - 有人可以解释与 Windows 文件系统相关的 C++ 转义字符 "\"吗?

c++ - 在 C++ 中使用 Gamma 校正转换 jpeg

c - DLL 中的函数未返回正确值

c# - Log4net 和 Windows 服务。我还应该做些什么才能使这项工作

c++ - 为什么 VS2015 调试器不能在监 window 口中正确显示函数地址?

c++ - MFC Ribbon - 从命令中获取基本元素

.net - 从 .NET Windows 服务调用 native DLL 失败

c# - 用于远程调用 Windows 服务方法的体系结构

c++ - 什么决定了 C 中整数的大小?