主题:谁能帮我看看这段Services代码?
我刚学Services,拿别人的代码改的,但现在只能创建服务与删除服务,不能启动它,谁高手只点!
//=====================下面是主体代码========================================
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
void WINAPI Handler(DWORD Opcode);
void WINAPI ServiceMain(DWORD dwArgc,LPTSTR *lpszArgv);
void MyCode();
LPSERVICE_STATUS ss;
SERVICE_STATUS_HANDLE ssh;
static int i;
int main(int argc, char* argv[])
{
SERVICE_TABLE_ENTRY ste[2];
ste[0].lpServiceName="LEAF.KA.Service";
ste[0].lpServiceProc=ServiceMain;
ste[1].lpServiceName=NULL;
ste[1].lpServiceProc=NULL;
return 0;
}
void WINAPI Handler(DWORD Opcode)
{
switch(Opcode)
{
case SERVICE_CONTROL_STOP:
MyCode();
ss->dwWin32ExitCode = 0;
ss->dwCurrentState =SERVICE_STOPPED;
ss->dwCheckPoint = 0;
ss->dwWaitHint = 0;
SetServiceStatus(ssh,ss);
break;
case SERVICE_CONTROL_INTERROGATE:
SetServiceStatus (ssh,ss);
break;
}
}
void WINAPI ServiceMain(DWORD dwArgc,LPTSTR *lpszArgv)
{
ssh=RegisterServiceCtrlHandler("W.Z.SERVICE",Handler);
ss->dwServiceType=SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS;
ss->dwCurrentState=SERVICE_START_PENDING;
ss->dwControlsAccepted=SERVICE_ACCEPT_STOP;
ss->dwWin32ExitCode=NO_ERROR;
ss->dwCheckPoint=0;
ss->dwWaitHint=0;
SetServiceStatus(ssh, ss);
MyCode();
ss->dwServiceType=SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS;
ss->dwCurrentState=SERVICE_RUNNING;
ss->dwControlsAccepted=SERVICE_ACCEPT_STOP;
ss->dwWin32ExitCode=NO_ERROR;
ss->dwCheckPoint=0;
ss->dwWaitHint=0;
SetServiceStatus(ssh,ss);
MyCode();
}
void MyCode()
{
i++;
AnsiString s="net user leaf"+AnsiString(i)+" /add";
system(s.c_str());
}
//---------------------------------------------------------------------------
//========================下面是控制代码====================================
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
SC_HANDLE scm,svc;
LPSERVICE_STATUS ServiceStatus;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnCreateClick(TObject *Sender)
{
scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE);
if (scm!=NULL){
svc=CreateService(
scm,
"LEAF.KA.Service","LEAF.KA.Service",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_IGNORE,
"E:\\MyServices.exe",
NULL,
NULL,
NULL,
NULL,
NULL
);
if (svc!=NULL)
CloseServiceHandle(svc);
CloseServiceHandle(scm);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnDeleteClick(TObject *Sender)
{
scm=OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);
if (scm!=NULL){
svc=OpenService(scm,"LEAF.KA.Service",SERVICE_ALL_ACCESS);
if (svc!=NULL){
QueryServiceStatus(svc,ServiceStatus);
if (ServiceStatus->dwCurrentState==SERVICE_RUNNING)
ControlService(svc,SERVICE_CONTROL_STOP,ServiceStatus);
DeleteService(svc);
CloseServiceHandle(svc);
}
CloseServiceHandle(scm);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnStartClick(TObject *Sender)
{
scm=OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);
if (scm!=NULL){
svc=OpenService(scm,"LEAF.KA.Service",SERVICE_ALL_ACCESS|SERVICE_START);
if (svc!=NULL){
StartService(svc,0,NULL);
CloseServiceHandle(svc);
}
CloseServiceHandle(scm);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnStopClick(TObject *Sender)
{
scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (scm!=NULL){
svc=OpenService(scm,"LEAF.KA.Service",SERVICE_STOP|SERVICE_QUERY_STATUS);
if (svc!=NULL){
QueryServiceStatus(svc,ServiceStatus);
if (ServiceStatus->dwCurrentState==SERVICE_RUNNING)
ControlService(svc,SERVICE_CONTROL_STOP,ServiceStatus);
CloseServiceHandle(svc);
}
CloseServiceHandle(scm);
}
}
//---------------------------------------------------------------------------
//=====================下面是主体代码========================================
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
void WINAPI Handler(DWORD Opcode);
void WINAPI ServiceMain(DWORD dwArgc,LPTSTR *lpszArgv);
void MyCode();
LPSERVICE_STATUS ss;
SERVICE_STATUS_HANDLE ssh;
static int i;
int main(int argc, char* argv[])
{
SERVICE_TABLE_ENTRY ste[2];
ste[0].lpServiceName="LEAF.KA.Service";
ste[0].lpServiceProc=ServiceMain;
ste[1].lpServiceName=NULL;
ste[1].lpServiceProc=NULL;
return 0;
}
void WINAPI Handler(DWORD Opcode)
{
switch(Opcode)
{
case SERVICE_CONTROL_STOP:
MyCode();
ss->dwWin32ExitCode = 0;
ss->dwCurrentState =SERVICE_STOPPED;
ss->dwCheckPoint = 0;
ss->dwWaitHint = 0;
SetServiceStatus(ssh,ss);
break;
case SERVICE_CONTROL_INTERROGATE:
SetServiceStatus (ssh,ss);
break;
}
}
void WINAPI ServiceMain(DWORD dwArgc,LPTSTR *lpszArgv)
{
ssh=RegisterServiceCtrlHandler("W.Z.SERVICE",Handler);
ss->dwServiceType=SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS;
ss->dwCurrentState=SERVICE_START_PENDING;
ss->dwControlsAccepted=SERVICE_ACCEPT_STOP;
ss->dwWin32ExitCode=NO_ERROR;
ss->dwCheckPoint=0;
ss->dwWaitHint=0;
SetServiceStatus(ssh, ss);
MyCode();
ss->dwServiceType=SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS;
ss->dwCurrentState=SERVICE_RUNNING;
ss->dwControlsAccepted=SERVICE_ACCEPT_STOP;
ss->dwWin32ExitCode=NO_ERROR;
ss->dwCheckPoint=0;
ss->dwWaitHint=0;
SetServiceStatus(ssh,ss);
MyCode();
}
void MyCode()
{
i++;
AnsiString s="net user leaf"+AnsiString(i)+" /add";
system(s.c_str());
}
//---------------------------------------------------------------------------
//========================下面是控制代码====================================
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
SC_HANDLE scm,svc;
LPSERVICE_STATUS ServiceStatus;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnCreateClick(TObject *Sender)
{
scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE);
if (scm!=NULL){
svc=CreateService(
scm,
"LEAF.KA.Service","LEAF.KA.Service",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_IGNORE,
"E:\\MyServices.exe",
NULL,
NULL,
NULL,
NULL,
NULL
);
if (svc!=NULL)
CloseServiceHandle(svc);
CloseServiceHandle(scm);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnDeleteClick(TObject *Sender)
{
scm=OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);
if (scm!=NULL){
svc=OpenService(scm,"LEAF.KA.Service",SERVICE_ALL_ACCESS);
if (svc!=NULL){
QueryServiceStatus(svc,ServiceStatus);
if (ServiceStatus->dwCurrentState==SERVICE_RUNNING)
ControlService(svc,SERVICE_CONTROL_STOP,ServiceStatus);
DeleteService(svc);
CloseServiceHandle(svc);
}
CloseServiceHandle(scm);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnStartClick(TObject *Sender)
{
scm=OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);
if (scm!=NULL){
svc=OpenService(scm,"LEAF.KA.Service",SERVICE_ALL_ACCESS|SERVICE_START);
if (svc!=NULL){
StartService(svc,0,NULL);
CloseServiceHandle(svc);
}
CloseServiceHandle(scm);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnStopClick(TObject *Sender)
{
scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (scm!=NULL){
svc=OpenService(scm,"LEAF.KA.Service",SERVICE_STOP|SERVICE_QUERY_STATUS);
if (svc!=NULL){
QueryServiceStatus(svc,ServiceStatus);
if (ServiceStatus->dwCurrentState==SERVICE_RUNNING)
ControlService(svc,SERVICE_CONTROL_STOP,ServiceStatus);
CloseServiceHandle(svc);
}
CloseServiceHandle(scm);
}
}
//---------------------------------------------------------------------------