课程名称Word格式文档下载.docx
- 文档编号:22255765
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:12
- 大小:303.93KB
课程名称Word格式文档下载.docx
《课程名称Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《课程名称Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
(4).练习在程序中启动服务;
(5).练习在程序中停止服务了;
(6).练习在程序中查询服务的状态;
(7).练习程序中修改服务的配置参数;
2.2实现步骤
(1).启动MicrosoftVisualStudio2008窗口并创建一个Win32控制台应用程序,运行该程序;
(2).在相应的地方写入相应的代码。
3使用环境
WindowsXP,MicrosoftVisualStudio2010
4核心代码及调试过程
4.1核心代码
4.1.1创建服务
VOIDSvcInstall()
{
SC_HANDLEschSCManager;
SC_HANDLEschService;
TCHARszPath[MAX_PATH];
if(!
GetModuleFileName(NULL,szPath,MAX_PATH))
{
printf("
Cannotinstallservice!
!
\n"
);
return;
}
schSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(NULL==schSCManager)
OpenSCManagerfailed!
schService=CreateService(schSCManager,
SVCNAME,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
szPath,
NULL,
NULL);
if(schService==NULL)
CreateServicefailed!
CloseServiceHandle(schSCManager);
else
Serviceinstalledsuccessfully!
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
}
if(argc==2&
&
!
strcmp(argv[1],"
-install"
))
SvcInstall();
枚举服务列表:
SC_HANDLEschSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
LPBYTElpServices;
DWORDn,nSize,npSize,nServicesReturned,nResumeHandle,dwServiceType;
if(schSCManager>
0)
nResumeHandle=0;
npSize=sizeof(ENUM_SERVICE_STATUS_PROCESS);
dwServiceType=SERVICE_WIN32|SERVICE_DRIVER|
SERVICE_KERNEL_DRIVER|SERVICE_FILE_SYSTEM_DRIVER
|SERVICE_WIN32_OWN_PROCESS|SERVICE_WIN32_SHARE_PROCESS;
lpServices=LPBYTE(LocalAlloc(LPTR,30720));
EnumServicesStatusEx(schSCManager,SC_ENUM_PROCESS_INFO,dwServiceType,SERVICE_STATE_ALL,
lpServices,30720,&
nSize,&
nServicesReturned,&
nResumeHandle,NULL);
{
}
for(inti=0;
i<
nServicesReturned-1;
i++)
LPENUM_SERVICE_STATUS_PROCESSlpServicxeStatus=LPENUM_SERVICE_STATUS_PROCESS(lpServices);
printf("
%s\t%s\n"
lpServicxeStatus->
lpServiceName,lpServicxeStatus->
lpDisplayName);
lpServices+=npSize;
启动服务:
SC_HANDLEhSC;
SC_HANDLEhandle;
hSC=:
:
OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(hSC==NULL)
无法连接服务管理器!
!
"
handle=:
OpenService(hSC,"
WebClient"
SERVICE_ALL_ACCESS);
if(handle==NULL)
无法打开服务!
return1;
if(StartService(handle,NULL,NULL)==FALSE)
服务启动失败!
服务启动成功"
停止服务:
无法打开服务管理器!
return2;
SERVICE_STATUSstatus;
if(ControlService(handle,SERVICE_CONTROL_STOP,&
status)==FALSE)
ControlService()函数执行失败!
ControlService()函数执行成功!
查询服务的状态:
if(:
QueryServiceStatus(handle,&
status)==false)
获取服务状态错误!
return3;
switch(status.dwCurrentState)
caseSERVICE_CONTINUE_PENDING:
恢复服务操作被挂起\n"
break;
caseSERVICE_PAUSE_PENDING:
暂停服务操作被挂起\n"
caseSERVICE_PAUSED:
服务被暂停\n"
caseSERVICE_RUNNING:
服务正在运行\n"
caseSERVICE_START_PENDING:
服务正在启动\n"
caseSERVICE_STOP_PENDING:
服务正在停止\n"
caseSERVICE_STOPPED:
服务没有运行\n"
default:
未知状态\n"
修改服务的配置参数:
:
ChangeServiceConfig(handle,SERVICE_NO_CHANGE,SERVICE_AUTO_START,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
CloseServiceHandle(handle);
printf("
修改服务参数成功!
system("
Pause"
return0;
程序执行结果:
Sc命令:
创建服务:
启动服务列表:
修改配置参数:
五、总结
通过此次上机实验对于Windows服务编程,有了一个基本的了解和学习,懂得了对Windows服务编程的一些基本方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程名称