如何开启系统服务? - C++ Builder / Windows SDK/API
如何用代码开启系统服务,最好写出代码。
[解决办法]
- C/C++ code
//定义控制台应用程序的入口点。//#include "stdafx.h"#include <windows.h>using namespace std;class CDSvr{public: static void ShowHelp(void); CDSvr(){para=NULL;}; CDSvr(_TCHAR* argv[]); ~CDSvr(){}; void Run(); static bool CreateSvr(_TCHAR* svrname,_TCHAR* path); static bool DeleteSvr(_TCHAR* svrname);private: _TCHAR** para;};CDSvr::CDSvr(_TCHAR* argv[]){ para=argv; Run();}void CDSvr::Run(){}void CDSvr::ShowHelp(){ cout<<" [use] "<<endl <<" [svrname] [path] "<<" create the service "<<endl <<" [svrname]"<<" delete service "<<endl;}bool CDSvr::CreateSvr(_TCHAR *svrname, _TCHAR *path){ SC_HANDLE sch=::OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE); if( NULL==sch ){ cout<<"openSCManager failed!"<<endl; return false; } SC_HANDLE sccs=NULL; if( NULL==(sccs=::CreateService( sch,svrname,svrname, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,path,NULL,NULL,NULL,NULL,NULL) ) ){ cout<<"CreateService Error"<<endl; ::CloseHandle(sch); ::CloseHandle(sccs); return false; } ::CloseHandle(sch); ::CloseHandle(sccs); return true;}bool CDSvr::DeleteSvr(_TCHAR *svrname){ SC_HANDLE sch=::OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE); if( NULL==sch ){ cout<<"openSCManager failed!"<<endl; return false; } SC_HANDLE sc=::OpenService(sch,svrname,SERVICE_ALL_ACCESS); if( NULL==sc ){ cout<<"open services failed!"<<endl; ::CloseHandle(sch); ::CloseHandle(sc); return false; } if(::DeleteService(sc)){ cout<<"delete "<<sc<<" SUCCESS"<<endl; }else{ cout<<"delete "<<sc<<" ERROR"<<endl; } ::CloseHandle(sch); ::CloseHandle(sc); return true;};int _tmain(int argc, _TCHAR* argv[]){ if( argc<2 ){ CDSvr::ShowHelp(); }else if( argc==2 ){ if(CDSvr::DeleteSvr( argv[argc-1])){ cout<< " DONE !!!"<<endl; }else{ cout<< " ERROR!!!"<<endl; } }else if( argc==3 ){ if(CDSvr::CreateSvr(argv[argc-2],argv[argc-1])){ cout<<" DONE!!!"<<endl; }else{ cout<<" ERROR!!"<<endl; } } return 0;}
[解决办法]
BOOL ServiceStart(const wchar_t *wcsServiceName)
{
SC_HANDLE hSCManager;
SC_HANDLE hService;
BOOL result=FALSE;
hSCManager=OpenSCManagerW(NULL,NULL,SC_MANAGER_CONNECT);
if(hSCManager!=NULL)
{
hService=OpenServiceW(hSCManager,wcsServiceName,SERVICE_START);
if(hService!=NULL)
{
result=StartService(hService,0,NULL);
CloseServiceHandle(hService);
}
CloseServiceHandle(hSCManager);
}
return(result);
}