void InstallService(AnsiString ServiceName,
AnsiString ServiceDispName,
AnsiString ServiceFileName)
{
HANDLE SvcMgr;
HANDLE Svc;
SvcMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!SvcMgr)
RaiseLastOSError();
try
{
Svc=CreateService(SvcMgr,ServiceName.c_str(),ServiceDispName.c_str(),
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
//SERVICE_AUTO_START
SERVICE_DEMAND_START
//SERVICE_DISABLED
,SERVICE_ERROR_NORMAL,
ServiceFileName.c_str(),NULL,NULL,NULL,NULL,NULL);
if(!Svc)RaiseLastOSError();
CloseServiceHandle(Svc);
}
__finally
{
CloseServiceHandle(SvcMgr);
}
}
--------------------------------------------------------------------
HANDLE SvcMgr;
HANDLE Svc;
SvcMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!SvcMgr)
RaiseLastOSError();
try
{
Svc=CreateService(SvcMgr,"1111","111",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
//SERVICE_AUTO_START
SERVICE_AUTO_START, //自动启动服务
SERVICE_ERROR_IGNORE, //忽略错误
exefile.c_str(),NULL,NULL,NULL,NULL,NULL);
if(!Svc)RaiseLastOSError();
CloseServiceHandle(Svc);
}
__finally
{
CloseServiceHandle(SvcMgr);
}
--------------------------------------------------------------------
if(IsServiceRunning(ServiceName)==true)
{
StopServiceRunning(ServiceName);
}
UnInstallService(ServiceName);
--------------------------------------------------------------------
bool IsServiceRunning(LPCSTR SrvName)
{
SC_HANDLE hService;
SC_HANDLE hManager;
SERVICE_STATUS stus;
hManager = OpenSCManager(NULL, 0,
SC_MANAGER_ALL_ACCESS);
if (hManager==NULL) return false;
memset(&stus, 0, sizeof(stus));
hService = OpenService(hManager,
SrvName, SERVICE_ALL_ACCESS);
if (hService != NULL) {
QueryServiceStatus(hService,
&stus);
CloseServiceHandle(hService);
}
CloseServiceHandle(hManager);
//SERVICE_RUNNING||SERVICE_PAUSED
if(stus.dwCurrentState == 4||stus.dwCurrentState == 7)
return true;
else
return false;
}
bool StopServiceRunning(LPCSTR SrvName)
{
SC_HANDLE hService;
SC_HANDLE hManager;
SERVICE_STATUS stus;
hManager = OpenSCManager(NULL, 0,SC_MANAGER_ALL_ACCESS);
if (hManager==NULL) return false;
memset(&stus, 0, sizeof(stus));
hService = OpenService(hManager,SrvName, SERVICE_ALL_ACCESS);
if (hService != NULL) {
ControlService(hService, SERVICE_CONTROL_STOP, &stus); //停止Service
CloseServiceHandle(hService);
}
CloseServiceHandle(hManager);
return stus.dwCurrentState == SERVICE_STOPPED;
}
void UnInstallService(AnsiString ServiceName)
{
HANDLE SvcMgr;
HANDLE Svc;
SvcMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!SvcMgr)
RaiseLastOSError();
try
{
Svc=OpenService(SvcMgr,ServiceName.c_str(),SERVICE_ALL_ACCESS);
if(!Svc)RaiseLastOSError();
try
{
if(!DeleteService(Svc))RaiseLastOSError();
}
__finally
{
CloseServiceHandle(Svc);
}
}
__finally
{
CloseServiceHandle(SvcMgr);
}
}
--------------------------------------------------------------------