16,471
社区成员
发帖
与我相关
我的任务
分享
#include<tchar.h>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <dos.h>
#include<windows.h>
using namespace std;
HANDLE StopEvent;
DWORD WINAPI HandlerEx(
__in DWORD dwControl,
__in DWORD dwEventType,
__in LPVOID lpEventData,
__in LPVOID lpContext
)
{
switch(dwControl)
{
case SERVICE_CONTROL_STOP:
SetEvent(StopEvent);
case SERVICE_CONTROL_INTERROGATE:
case SERVICE_CONTROL_SHUTDOWN:
return NO_ERROR;
default:return ERROR_CALL_NOT_IMPLEMENTED;
}
}
VOID WINAPI ServiceMain(
__in DWORD dwArgc,
__in LPTSTR *lpszArgv
)
{
SERVICE_STATUS_HANDLE hServiceStatus;static SERVICE_STATUS Status={SERVICE_WIN32_OWN_PROCESS,SERVICE_RUNNING,SERVICE_ACCEPT_STOP,NO_ERROR,0,500};
StopEvent=CreateEventW(0,0,0,0);
hServiceStatus=RegisterServiceCtrlHandlerExW(L"serviceABCDEFG",HandlerEx,0);
SetServiceStatus(hServiceStatus,&Status);
WaitForSingleObject(StopEvent,INFINITE);
Status.dwCheckPoint+=1;
Status.dwCurrentState=SERVICE_STOPPED;
SetServiceStatus(hServiceStatus,&Status);
}
int wmain(int argc, _TCHAR* argv[])
{
int a,b;static wchar_t FileName[1024];SC_HANDLE scm,srv=0;SERVICE_STATUS Status;
SERVICE_TABLE_ENTRYW table={L"serviceABCDEFG",ServiceMain};
if(argc-1)
{
if(!wcscmp(argv[1],L"service"))
{
StartServiceCtrlDispatcherW(&table);
}else if(!wcscmp(argv[1],L"start"))
{
scm=OpenSCManagerW(0,0,5);
if(scm)
{
srv=OpenServiceW(scm,L"serviceABCDEFG",SERVICE_START);
CloseServiceHandle(scm);
}
if(srv)
{
if(StartServiceW(srv,0,0))cout<<"ok"<<endl;else cout<<"failed"<<endl;
CloseServiceHandle(srv);
}else cout<<"failed"<<endl;
}else if(!wcscmp(argv[1],L"stop"))
{
scm=OpenSCManagerW(0,0,5);
if(scm)
{
srv=OpenServiceW(scm,L"serviceABCDEFG",SERVICE_STOP);
CloseServiceHandle(scm);
}
if(srv)
{
ControlService(srv,SERVICE_CONTROL_STOP,&Status);
CloseServiceHandle(srv);
cout<<"ok"<<endl;
}else cout<<"failed"<<endl;
}
}else
{
cout<<"Press any key to install."<<endl;
getch();
*FileName=L'\"';
GetModuleFileNameW(0,FileName+1,768);
wcscat(FileName,L"\" service");
scm=OpenSCManagerW(0,0,3);
if(scm)
{
srv=CreateServiceW(scm,L"serviceABCDEFG",0,SERVICE_START,SERVICE_WIN32_OWN_PROCESS,SERVICE_DEMAND_START,0,FileName,0,0,0,0,0);
CloseServiceHandle(scm);
}
if(srv)
{
CloseServiceHandle(srv);
cout<<"ok"<<endl;
}else cout<<"failed"<<endl;
}
return 0;
}