ServicewOperate.cpp
#include "stdafx.h"
#include <Windows.h>
#include "ServicewOperate.h"
void ShowError(char *lpszText)
{
char szErr[MAX_PATH] = { 0 };
sprintf(szErr, "%s ERROR [%d]", lpszText, GetLastError());
MessageBoxA(NULL, szErr, "ERROR", MB_OK | MB_ICONERROR);
}
BOOL SystemServiceOperate(char *lpszDriverPath, int iOperateType)
{
BOOL bRet = FALSE;
char szName[MAX_PATH] = { 0 };
lstrcpyA(szName, lpszDriverPath);
PathStripPathA(szName);
SC_HANDLE shOSCM = NULL, shCS = NULL;
SERVICE_STATUS ss;
shOSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (!shOSCM)
{
ShowError("OpenSCManager");
return FALSE;
}
if (0 != iOperateType)
{
shCS = OpenServiceA(shOSCM, szName, SERVICE_ALL_ACCESS);
if (!shCS)
{
ShowError("OpenServiceA");
CloseServiceHandle(shOSCM);
shOSCM = NULL;
return FALSE;
}
}
switch (iOperateType)
{
case 0:
{
shCS = CreateServiceA(shOSCM, szName, szName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, lpszDriverPath, NULL, NULL, NULL, NULL, NULL);
if (!shCS)
{
ShowError("CreateServiceA");
bRet = FALSE;
}
break;
}
case 1:
{
if (!StartService(shCS, 0, NULL))
{
ShowError("StartService");
bRet = FALSE;
}
break;
}
case 2:
{
if (!ControlService(shCS, SERVICE_CONTROL_STOP, &ss));
{
ShowError("ControlService");
bRet = FALSE;
}
break;
}
case 3:
{
if (!DeleteService(shCS))
{
ShowError("DeleteService");
bRet = FALSE;
}
break;
}
default:
break;
}
if (shCS)
{
CloseServiceHandle(shCS);
shCS = NULL;
}
if (shOSCM)
{
CloseServiceHandle(shOSCM);
shOSCM = NULL;
}
return bRet;
}
aotuRun_Service.cpp
// aotuRun_Service.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ServicewOperate.h"
int _tmain(int argc, _TCHAR* argv[])
{
BOOL bRet = FALSE;
char szFileName[MAX_PATH] = "I:\\VS2013Project\\windows_hack_base_code\\autoRun\\aotuRun_Service\\Debug\\ServiceTest.exe";
bRet = SystemServiceOperate(szFileName, 0);
if (FALSE == bRet)
{
printf("Create Error! \n");
}
bRet = SystemServiceOperate(szFileName, 1);
if (FALSE == bRet)
{
printf("Start Error! \n");
}
printf("Creat and Start Success! \n");
system("pause");
bRet = SystemServiceOperate(szFileName, 2);
if (FALSE == bRet)
{
printf("Stop Error! \n");
}
bRet = SystemServiceOperate(szFileName, 3);
if (FALSE == bRet)
{
printf("Delete Error! \n");
}
printf("Stop and Delete Success! \n");
system("pause");
return 0;
}