读书人

怎么开启系统服务

发布时间: 2012-03-07 09:13:51 作者: rapoo

如何开启系统服务? - 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);
}

读书人网 >C++ Builder

热点推荐