为什么创建的Windows服务不能暂停
我新建了Windows服务,在调用CreateService的时候,明明指定了SERVICE_ALL_ACCESS的服务权限,为什么在服务管理器中,那个服务的右键菜单是灰色,而且停止了之后就会报错:
DWORD dw;
DWORD dwID;
SC_HANDLE scmHandle;
SC_HANDLE serviceHandle;
SERVICE_STATUS_HANDLE statusHanle;
SERVICE_STATUS status;
VOID WINAPI Handler(DWORD fdwControl)
{
FILE* file;
int i=0;
switch (fdwControl)
{
case SERVICE_CONTROL_STOP:
status.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus(statusHanle, &status);
PostThreadMessage(dwID, WM_CLOSE, 0, 0);
break;
case SERVICE_CONTROL_PAUSE:
file=fopen("C:\\abc.txt","a+");
fputs("服务暂停",file);
fclose(file);
break;
case SERVICE_CONTROL_CONTINUE:
file=fopen("C:\\abc.txt","a+");
fputs("服务继续",file);
fclose(file);
break;
case SERVICE_CONTROL_INTERROGATE:
file=fopen("C:\\abc.txt","a+");
fputs("服务交互",file);
break;
case SERVICE_CONTROL_SHUTDOWN:
file=fopen("C:\\abc.txt","a+");
fputs("服务关闭",file);
break;
default:
break;
}
}
VOID WINAPI ServiceMain(
DWORD dwArgc,
LPTSTR* lpszArgv
)
{
statusHanle=RegisterServiceCtrlHandler(_T("MyService"),(LPHANDLER_FUNCTION)Handler);
status.dwCurrentState=SERVICE_START_PENDING;
status.dwControlsAccepted=SERVICE_ACCEPT_STOP;
status.dwWin32ExitCode = 0;
status.dwServiceSpecificExitCode = 0;
status.dwCheckPoint = 0;
status.dwWaitHint = 0;
status.dwServiceType=SERVICE_WIN32_OWN_PROCESS;
SetServiceStatus(statusHanle,&status);
status.dwCurrentState=SERVICE_RUNNING;
status.dwControlsAccepted=
SetServiceStatus(statusHanle,&status);
FILE* file;
int i=0;
file=fopen("C:\\abc.txt","a+");
while(i<1000)
{
fputs("sfdf\r\n",file);
Sleep(3000);
}
fclose(file);
status.dwCurrentState=SERVICE_STOP;
SetServiceStatus(statusHanle,&status);
}
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
TCHAR szFile[1024];
dwID=GetCurrentProcessId();
SERVICE_TABLE_ENTRY entry[]={{_T("MyService"),(LPSERVICE_MAIN_FUNCTION)ServiceMain},{NULL,NULL}};
if(_tcscmp(lpCmdLine,_T("/install"))==0)
{
::GetModuleFileName(NULL,szFile,1024);
scmHandle=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
serviceHandle=CreateService(scmHandle,_T("MyService"),_T("MyService"),SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,szFile,NULL,NULL,_T(""),NULL,NULL);
dw=GetLastError();
}
else
{
if(!StartServiceCtrlDispatcher(entry))
{
MessageBox(NULL,_T("服务主函数注册失败了"),_T("消息"),MB_OK);
}
}
return 0;
}