【发布时间】:2011-07-01 03:54:36
【问题描述】:
我已经使用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;
}
但是当我启动服务时,它既不会休眠也不会启动资源管理器。我错过了什么吗?
【问题讨论】:
-
Explorer 始终在 Windows 上运行,因此不会重新启动它。查看您的任务管理器,了解正在发生的事情。
-
您对这段代码的期望是什么? “当我启动服务时它什么也不做”是什么意思?如果您希望某个窗口出现,您应该更改服务属性并设置“允许服务与桌面交互”复选框。
-
您似乎正试图每 150 秒打开一个新的资源管理器窗口(假设该服务被标记为“允许桌面交互)。如果这是您的所有服务,您最好设置设置调度程序任务来执行此操作。
标签: c++ windows windows-services window servicecontroller