ATL创建的windows服务,只是负责控制,而将业务逻辑放在mfc的dll中,建立线程后,在发送消息,代码如下
extern "C" __declspec(dllexport) void _DllMain() { unsigned nThreadId; HANDLE hThread = (HANDLE)_beginthreadex(NULL,0, &ThreadMain,NULL, 0, &nThreadId); Sleep(1000); PostThreadMessage(nThreadId, WM_TIMEISUP, NULL, NULL); } unsigned __stdcall ThreadMain(LPVOID pParam) { MSG msg; while(true){ if(::GetMessage(&msg, NULL, NULL, NULL)) { switch(msg.message){ case WM_TIMEISUP: { Download d; break; } default: break; } } }; /* MSG msg; while(::PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE)) { switch(msg.message) { case WM_TIMEISUP: { Download d; break; } default: break; } }*/ return 0; }
服务启动后再停止时出错,是因为我在成员函数PreMessageLoop()函数中缺少控制代码所致,控制代码如下:
HRESULT CRestoreSerModule::PreMessageLoop(int nShowCmd) { m_status.dwControlsAccepted = m_status.dwControlsAccepted | SERVICE_ACCEPT_PAUSE_CONTINUE; HRESULT hr = __super::PreMessageLoop(nShowCmd); if (hr == S_FALSE) hr = S_OK; return hr; }
加上这些代码即可正常启动、停止了。
至于无法删除,
[SC] deleteservice FAILD 1072 这个错误是因为停止没有相应,所以控制器上好像停止了,可是程序依然在运行,打开任务管理器,结束这个进程,在删除就没有问题了。