服务管理CMD版(VC源代码)
服务管理 CMD版
功能如下:
查看服务
添加服务
删除服务
停止服务
启动服务
程序很简单运行效果如图所示
为了方便,我把源代码一块打包了,需要的话可以自己修改,有问题可以一块讨论……呵呵
完整代码如下:
///////////////////////////////////////////////////////////////////////////////
//服务管理器-命令行版//
//日期:2007/06/08//
//作者:冷风//
//文件:Server.cpp//
//信箱:[email protected]//
//QQ:121121606//
//说明:若有问题请访问Blog.****.net/chinafe偶可以提供免费技术支持呵呵//
///////////////////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<windows.h>
#include<Winsvc.h>
BOOLDisplayServices();
voidAddServices();
voidDelServices();
voidStopServices();
voidStartServices();
main()
{
inti=10;
while(i!=0)
{
printf("**************************************************** ");
printf("服务管理器-命令行版 ");
printf("作者:冷风2007.6.8 ");
printf("**************************************************** ");
printf("查看服务请输入1 ");
printf("添加服务请输入2 ");
printf("删除服务请输入3 ");
printf("停止服务请输入4 ");
printf("启动服务请输入5 ");
printf("退出程序请输入0 ");
scanf("%d",&i);
if(1==i)
{
DisplayServices();
}
if(2==i)
{
AddServices();
}
if(3==i)
{
DelServices();
}
if(4==i)
{
StopServices();
}
if(5==i)
{
StartServices();
}
}
return0;
}
BOOLDisplayServices()
{
LPENUM_SERVICE_STATUSlpServices=NULL;
DWORDnSize=0;
DWORDnServicesReturned;
DWORDnResumeHandle=0;
DWORDdwServiceType=SERVICE_WIN32;
SC_HANDLEschSCManager=NULL;
BOOLFlag=FALSE;
DWORDi=0;
UINTj=0;
schSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(schSCManager==NULL)//FailToOpenSCM
{
printf("FailToOpenSCM ");
returnFALSE;
}
lpServices=(LPENUM_SERVICE_STATUS)LocalAlloc(LPTR,64*1024);//AllocateRam
if(lpServices==NULL)//FailToAllocateRam
{
printf("FailToAllocateRam ");
gotoCleanUP;
}
//EnumAllServiceBasedOnServiceType
if(EnumServicesStatus(schSCManager,
dwServiceType,
SERVICE_STATE_ALL,
(LPENUM_SERVICE_STATUS)lpServices,
64*1024,
&nSize,
&nServicesReturned,
&nResumeHandle)==NULL)
{
printf("FailToEnumService ");
gotoCleanUP;
}
//DisplayTheServices
printf("%-34s%s ","ServiceName","DisplayName");
for(i=0;i<nServicesReturned;i++)
{
printf("%d:%-32s%s ",++j,lpServices[i].lpServiceName,lpServices[i].lpDisplayName);
}
Flag=TRUE;
//CloseServiceHandle,FreeAllocatedRamAndReturnToTheCaller
CleanUP:
CloseServiceHandle(schSCManager);
if(lpServices!=NULL)
{
LocalFree(lpServices);
}
getchar();
returnFlag;
}
voidAddServices()
{
charname[100];
charinfo[200];
charpath[300];
printf("请输入服务名 ");
scanf("%s",&name);
printf("请输入服务描述 ");
scanf("%s",&info);
printf("请输入程序路径 ");
scanf("%s",&path);
SC_HANDLEmanager=NULL;
SC_HANDLEservice=NULL;
if((manager=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))==NULL)
{
printf("OpenSCManagerError");
}
service=CreateService(
manager,name,info,
SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,
path,0,0,0,0,0);
if(service)
printf("服务创建成功 ");
else
printf("服务创建失败 ");
CloseServiceHandle(service);
CloseServiceHandle(manager);
}
voidDelServices()
{
charname[100];
SC_HANDLEscm;
SC_HANDLEservice;
SERVICE_STATUSstatus;
printf("请输入要删除的服务名 ");
scanf("%s",&name);
if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))==NULL)
{
printf("OpenSCManagerError ");
}
service=OpenService(scm,name,SERVICE_ALL_ACCESS|DELETE);
if(!service)
{
printf("OpenServiceerror! ");
return;
}
BOOLisSuccess=QueryServiceStatus(service,&status);
if(!isSuccess)
{
printf("QueryServiceStatuserror! ");
return;
}
if(status.dwCurrentState!=SERVICE_STOPPED)
{
isSuccess=ControlService(service,SERVICE_CONTROL_STOP,&status);
if(!isSuccess)
printf("StopServiceerror! ");
Sleep(500);
}
isSuccess=DeleteService(service);
if(!isSuccess)
printf("删除服务失败! ");
else
printf("删除服务成功! ");
CloseServiceHandle(service);
CloseServiceHandle(scm);
}
voidStopServices()
{
charname[100];
SC_HANDLEscm;
SC_HANDLEservice;
SERVICE_STATUSstatus;
printf("请输入要停止的服务名 ");
scanf("%s",&name);
if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))==NULL)
{
printf("OpenSCManagerError ");
}
service=OpenService(scm,name,SERVICE_ALL_ACCESS|DELETE);
if(!service)
{
printf("OpenServiceerror! ");
return;
}
BOOLisSuccess=QueryServiceStatus(service,&status);
if(!isSuccess)
{
printf("QueryServiceStatuserror! ");
return;
}
if(status.dwCurrentState!=SERVICE_STOPPED)
{
isSuccess=ControlService(service,SERVICE_CONTROL_STOP,&status);
if(!isSuccess)
printf("服务停止失败! ");
else
printf("服务停止成功! ");
Sleep(500);
}else
{
printf("此服务没有运行! ");
}
}
voidStartServices()
{
charname[100];
SC_HANDLEscm;
SC_HANDLEservice;
SERVICE_STATUSstatus;
printf("请输入要启动的服务名 ");
scanf("%s",&name);
if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))==NULL)
{
printf("OpenSCManagerError ");
}
service=OpenService(scm,name,SERVICE_ALL_ACCESS|DELETE);
if(!service)
{
printf("OpenServiceerror! ");
return;
}
BOOLisSuccess=QueryServiceStatus(service,&status);
if(!isSuccess)
{
printf("QueryServiceStatuserror! ");
return;
}
if(status.dwCurrentState==SERVICE_STOPPED)
{
isSuccess=StartService(service,0,NULL);
if(!isSuccess)
printf("服务启动失败! ");
else
printf("服务启动成功! ");
}else
{
printf("此服务正在运行! ");
}
}
//服务管理器-命令行版//
//日期:2007/06/08//
//作者:冷风//
//文件:Server.cpp//
//信箱:[email protected]//
//QQ:121121606//
//说明:若有问题请访问Blog.****.net/chinafe偶可以提供免费技术支持呵呵//
///////////////////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<windows.h>
#include<Winsvc.h>
BOOLDisplayServices();
voidAddServices();
voidDelServices();
voidStopServices();
voidStartServices();
main()
{
inti=10;
while(i!=0)
{
printf("**************************************************** ");
printf("服务管理器-命令行版 ");
printf("作者:冷风2007.6.8 ");
printf("**************************************************** ");
printf("查看服务请输入1 ");
printf("添加服务请输入2 ");
printf("删除服务请输入3 ");
printf("停止服务请输入4 ");
printf("启动服务请输入5 ");
printf("退出程序请输入0 ");
scanf("%d",&i);
if(1==i)
{
DisplayServices();
}
if(2==i)
{
AddServices();
}
if(3==i)
{
DelServices();
}
if(4==i)
{
StopServices();
}
if(5==i)
{
StartServices();
}
}
return0;
}
BOOLDisplayServices()
{
LPENUM_SERVICE_STATUSlpServices=NULL;
DWORDnSize=0;
DWORDnServicesReturned;
DWORDnResumeHandle=0;
DWORDdwServiceType=SERVICE_WIN32;
SC_HANDLEschSCManager=NULL;
BOOLFlag=FALSE;
DWORDi=0;
UINTj=0;
schSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(schSCManager==NULL)//FailToOpenSCM
{
printf("FailToOpenSCM ");
returnFALSE;
}
lpServices=(LPENUM_SERVICE_STATUS)LocalAlloc(LPTR,64*1024);//AllocateRam
if(lpServices==NULL)//FailToAllocateRam
{
printf("FailToAllocateRam ");
gotoCleanUP;
}
//EnumAllServiceBasedOnServiceType
if(EnumServicesStatus(schSCManager,
dwServiceType,
SERVICE_STATE_ALL,
(LPENUM_SERVICE_STATUS)lpServices,
64*1024,
&nSize,
&nServicesReturned,
&nResumeHandle)==NULL)
{
printf("FailToEnumService ");
gotoCleanUP;
}
//DisplayTheServices
printf("%-34s%s ","ServiceName","DisplayName");
for(i=0;i<nServicesReturned;i++)
{
printf("%d:%-32s%s ",++j,lpServices[i].lpServiceName,lpServices[i].lpDisplayName);
}
Flag=TRUE;
//CloseServiceHandle,FreeAllocatedRamAndReturnToTheCaller
CleanUP:
CloseServiceHandle(schSCManager);
if(lpServices!=NULL)
{
LocalFree(lpServices);
}
getchar();
returnFlag;
}
voidAddServices()
{
charname[100];
charinfo[200];
charpath[300];
printf("请输入服务名 ");
scanf("%s",&name);
printf("请输入服务描述 ");
scanf("%s",&info);
printf("请输入程序路径 ");
scanf("%s",&path);
SC_HANDLEmanager=NULL;
SC_HANDLEservice=NULL;
if((manager=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))==NULL)
{
printf("OpenSCManagerError");
}
service=CreateService(
manager,name,info,
SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,
path,0,0,0,0,0);
if(service)
printf("服务创建成功 ");
else
printf("服务创建失败 ");
CloseServiceHandle(service);
CloseServiceHandle(manager);
}
voidDelServices()
{
charname[100];
SC_HANDLEscm;
SC_HANDLEservice;
SERVICE_STATUSstatus;
printf("请输入要删除的服务名 ");
scanf("%s",&name);
if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))==NULL)
{
printf("OpenSCManagerError ");
}
service=OpenService(scm,name,SERVICE_ALL_ACCESS|DELETE);
if(!service)
{
printf("OpenServiceerror! ");
return;
}
BOOLisSuccess=QueryServiceStatus(service,&status);
if(!isSuccess)
{
printf("QueryServiceStatuserror! ");
return;
}
if(status.dwCurrentState!=SERVICE_STOPPED)
{
isSuccess=ControlService(service,SERVICE_CONTROL_STOP,&status);
if(!isSuccess)
printf("StopServiceerror! ");
Sleep(500);
}
isSuccess=DeleteService(service);
if(!isSuccess)
printf("删除服务失败! ");
else
printf("删除服务成功! ");
CloseServiceHandle(service);
CloseServiceHandle(scm);
}
voidStopServices()
{
charname[100];
SC_HANDLEscm;
SC_HANDLEservice;
SERVICE_STATUSstatus;
printf("请输入要停止的服务名 ");
scanf("%s",&name);
if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))==NULL)
{
printf("OpenSCManagerError ");
}
service=OpenService(scm,name,SERVICE_ALL_ACCESS|DELETE);
if(!service)
{
printf("OpenServiceerror! ");
return;
}
BOOLisSuccess=QueryServiceStatus(service,&status);
if(!isSuccess)
{
printf("QueryServiceStatuserror! ");
return;
}
if(status.dwCurrentState!=SERVICE_STOPPED)
{
isSuccess=ControlService(service,SERVICE_CONTROL_STOP,&status);
if(!isSuccess)
printf("服务停止失败! ");
else
printf("服务停止成功! ");
Sleep(500);
}else
{
printf("此服务没有运行! ");
}
}
voidStartServices()
{
charname[100];
SC_HANDLEscm;
SC_HANDLEservice;
SERVICE_STATUSstatus;
printf("请输入要启动的服务名 ");
scanf("%s",&name);
if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))==NULL)
{
printf("OpenSCManagerError ");
}
service=OpenService(scm,name,SERVICE_ALL_ACCESS|DELETE);
if(!service)
{
printf("OpenServiceerror! ");
return;
}
BOOLisSuccess=QueryServiceStatus(service,&status);
if(!isSuccess)
{
printf("QueryServiceStatuserror! ");
return;
}
if(status.dwCurrentState==SERVICE_STOPPED)
{
isSuccess=StartService(service,0,NULL);
if(!isSuccess)
printf("服务启动失败! ");
else
printf("服务启动成功! ");
}else
{
printf("此服务正在运行! ");
}
}