Windows系统编程---第9章.ppt

上传人:qwe****56 文档编号:70010872 上传时间:2023-01-14 格式:PPT 页数:79 大小:951.50KB
返回 下载 相关 举报
Windows系统编程---第9章.ppt_第1页
第1页 / 共79页
Windows系统编程---第9章.ppt_第2页
第2页 / 共79页
点击查看更多>>
资源描述

《Windows系统编程---第9章.ppt》由会员分享,可在线阅读,更多相关《Windows系统编程---第9章.ppt(79页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、WindowsWindows系统编程实用教程系统编程实用教程系统编程实用教程系统编程实用教程授课教师:授课教师:职务:职务:第第9章章 Windows服务编程服务编程课程描述课程描述WindowsWindowsWindowsWindows服务是长服务是长服务是长服务是长期在后台运行、不期在后台运行、不期在后台运行、不期在后台运行、不与用户进行交互的与用户进行交互的与用户进行交互的与用户进行交互的程序。在程序。在程序。在程序。在C/SC/SC/SC/S结构结构结构结构的应用程序中通常的应用程序中通常的应用程序中通常的应用程序中通常可以服务的形式开可以服务的形式开可以服务的形式开可以服务的形式开发

2、服务器程序。有发服务器程序。有发服务器程序。有发服务器程序。有的应用程序中还需的应用程序中还需的应用程序中还需的应用程序中还需要检测和控制服务要检测和控制服务要检测和控制服务要检测和控制服务的状态。本章将介的状态。本章将介的状态。本章将介的状态。本章将介绍绍绍绍WindowsWindowsWindowsWindows服务编服务编服务编服务编程的基本方法。程的基本方法。程的基本方法。程的基本方法。本章知识点本章知识点9.1 Windows9.1 Windows服务的概念和管理服务的概念和管理9.2 Windows9.2 Windows服务编程服务编程9.3 9.3 开发开发WindowsWind

3、ows服务程序服务程序9.4 9.4 增加和使用组件增加和使用组件9.1 Windows服务的概念和管理服务的概念和管理9.1.1 9.1.1 管理管理WindowsWindows服务服务9.1.2 9.1.2 服务控制器服务控制器9.1.1 管理管理Windows服务服务服务的属性对话框服务的属性对话框 命令行工具命令行工具sc.exesc command service name .sc command service name .参数说明如下:参数说明如下:p,指定要连接的计算机,格式为,指定要连接的计算机,格式为“”。pcommandcommand,指定对服务进行的操作,具体如下:,指

4、定对服务进行的操作,具体如下:query,查询服务的状态或枚举服务类型的状态。queryex,查询服务的扩展状态或枚举服务类型的状态。start,启动服务。pause,向服务发送 PAUSE 控制请求。interrogat,-向服务发送 INTERROGATE 控制请求。continue,向服务发送 CONTINUE 控制请求。stop,向服务发送 STOP 请求。config,永久更改服务的配置。description,更改服务的描述。failure,更改服务失败时所进行的操作sidtype,更改服务的服务 SID 类型。qc,查询服务的配置信息。qdescription,查询服务的描述。接

5、上接上qfailure,查询服务失败时所进行的操作qsidtype,查询服务的服务 SID 类型。delete,从注册表中删除服务。create,创建服务(将其添加到注册表)control,向服务发送控制。sdshow,显示服务的安全描述符。sdset,设置服务的安全描述符。showsid,显示与任意名称相对应的服务 SID。GetDisplayName,获取服务的显示名称。GetKeyName,获取服务的键名。EnumDepend,枚举服务的依存关系。pservice nameservice name,指定要操作的服务名。,指定要操作的服务名。【例【例9.1】p使用使用scsc命令查询服务命

6、令查询服务MySQLMySQL的状态,命令如下:的状态,命令如下:sc query MySQLsc query MySQL【例【例9.2】p使用使用scsc命令停止服务命令停止服务MySQLMySQL的状态,命令如下:的状态,命令如下:sc sc stopstop MySQL MySQL9.1.2 服务控制器服务控制器p服务控制器(服务控制器(Service Control Manager Service Control Manager,SCMSCM)是)是Windows NTWindows NT家族操作系统中的一个系统进程,它可以家族操作系统中的一个系统进程,它可以启动、停止启动、停止Win

7、dowsWindows服务,并与服务,并与WindowsWindows服务交流。服务交流。p服务控制器对应的可执行文件是服务控制器对应的可执行文件是%SystemRoot%services.exe%SystemRoot%services.exe,它以,它以WindowsWindows控制台程控制台程序的形式运行。序的形式运行。注册表中关于服务的内容注册表中关于服务的内容注册表中服务包含的键值注册表中服务包含的键值名称说明DisplayName服务的显示名称。如果没有指定,则使用键名作为服务的名称Group指定服务所属得为服务组。如果没有指定,则该服务不属于任何服务组ErrorControl指定

8、服务或设备驱动程序在加载和初始化时出现错误的处理方法。取值如下:0(忽略),忽略出现的错误,继续启动,不产生警告;1(正常),缺省值,继续启动,弹出一个警告消息框,并在系统日志中记录警告信息;2(严重),系统声明启动失败;3(紧急),系统声明启动失败,并停止启动过程,运行调试程序;ImagePath驱动程序或服务对应的可执行文件的位置ObjectName用于指定驱动程序对象的名称,用于加载驱动程序Start指定服务的启动方式。取值如下:0,由系统内核加载;1,由I/O管理器加载;2,由SCM加载;3,由用户手动启动Type指定服务的类型。9.2 Windows服务编程服务编程9.2.1 9.2

9、.1 与与SCMSCM建立连接建立连接9.2.2 9.2.2 创建服务创建服务9.2.3 9.2.3 打开服务打开服务9.2.4 9.2.4 枚举服务列表枚举服务列表9.2.5 9.2.5 启动服务启动服务9.2.6 9.2.6 停止服务停止服务9.2.7 9.2.7 查询服务的状态查询服务的状态9.2.8 9.2.8 修改修改服务的服务的配置参数配置参数9.2.1 与与SCM建立连接建立连接SC_HANDLE WINAPI OpenSCManager(SC_HANDLE WINAPI OpenSCManager(_in LPCTSTR lpMachineName,_in LPCTSTR lp

10、MachineName,/指定要连接的目标计算机,指定要连接的目标计算机,如果为如果为NULLNULL或空字符串,则连接到本地计算机或空字符串,则连接到本地计算机 _in LPCTSTR lpDatabaseName,_in LPCTSTR lpDatabaseName,/要连接的服务控制器名字,要连接的服务控制器名字,应使用应使用SERVICES_ACTIVE_DATABASESERVICES_ACTIVE_DATABASE。如果使用。如果使用NULLNULL,则表示连接的默认,则表示连接的默认服务控制器服务控制器 _in DWORD dwDesiredAccess _in DWORD dw

11、DesiredAccess/指定对服务控制器的访问指定对服务控制器的访问权限权限););9.2.2 创建服务创建服务SC_HANDLE WINAPI CreateService(SC_HANDLE WINAPI CreateService(_in SC_HANDLE hSCManager,_in SC_HANDLE hSCManager,_in LPCTSTR lpServiceName,_in LPCTSTR lpServiceName,_in LPCTSTR lpDisplayName,_in LPCTSTR lpDisplayName,_in DWORD dwDesiredAccess,

12、_in DWORD dwDesiredAccess,_in DWORD dwServiceType,_in DWORD dwServiceType,_in DWORD dwStartType,_in DWORD dwStartType,_in DWORD dwErrorControl,_in DWORD dwErrorControl,_in LPCTSTR lpBinaryPathName,_in LPCTSTR lpBinaryPathName,_in LPCTSTR lpLoadOrderGroup,_in LPCTSTR lpLoadOrderGroup,_out LPDWORD lpd

13、wTagId,_out LPDWORD lpdwTagId,_in LPCTSTR lpDependencies,_in LPCTSTR lpDependencies,_in LPCTSTR lpServiceStartName,_in LPCTSTR lpServiceStartName,_in LPCTSTR lpPassword _in LPCTSTR lpPassword););【例【例9.3】p编写程序,将其自身安装为编写程序,将其自身安装为WindowsWindows服务。自定义函数服务。自定义函数SvcInstall()SvcInstall()用于安装服务,代码如用于安装服务,代

14、码如下:下:#include stdafx.h#include stdafx.h#include#include#include#include#define SVCNAME TEXT(SvcName)#define SVCNAME TEXT(SvcName)VOID SvcInstall()VOID SvcInstall()SC_HANDLE schSCManager;SC_HANDLE schSCManager;SC_HANDLE schService;SC_HANDLE schService;TCHAR szPathMAX_PATH;TCHAR szPathMAX_PATH;/获取当前程

15、序的可执行文件的路径获取当前程序的可执行文件的路径 if(!GetModuleFileName(NULL,szPath,MAX_PATH)if(!GetModuleFileName(NULL,szPath,MAX_PATH)printf(Cannot install service(%d)n,GetLastError();printf(Cannot install service(%d)n,GetLastError();return;return;接上接上 /获取服务控制器数据库句柄获取服务控制器数据库句柄 schSCManager=OpenSCManager(schSCManager=Ope

16、nSCManager(NULL,/NULL,/本地计算机本地计算机 NULL,/NULL,/使用缺省的数据库使用缺省的数据库 SC_MANAGER_ALL_ACCESS);/SC_MANAGER_ALL_ACCESS);/使用全部访问权限使用全部访问权限 if(NULL=schSCManager)if(NULL=schSCManager)printf(OpenSCManager failed(%d)n,GetLastError();printf(OpenSCManager failed(%d)n,GetLastError();return;return;/安装服务安装服务 schService

17、=CreateService(schService=CreateService(schSCManager,/schSCManager,/服务控制器数据库句柄服务控制器数据库句柄 SVCNAME,/SVCNAME,/服务名服务名 SVCNAME,/SVCNAME,/服务显示名服务显示名 接上接上SERVICE_ALL_ACCESS,/SERVICE_ALL_ACCESS,/使用全部访问权限使用全部访问权限 SERVICE_WIN32_OWN_PROCESS,/SERVICE_WIN32_OWN_PROCESS,/服务类型为在其自己的进程中运行的服务服务类型为在其自己的进程中运行的服务 SERVI

18、CE_DEMAND_START,/SERVICE_DEMAND_START,/启动类型启动类型 SERVICE_ERROR_NORMAL,/SERVICE_ERROR_NORMAL,/错误控制类型错误控制类型 szPath,/szPath,/服务可执行文件的路径服务可执行文件的路径 NULL,/NULL,/没有加载顺序组没有加载顺序组 NULL,/NULL,/没有标记标识符没有标记标识符 NULL,/NULL,/没有依赖关系没有依赖关系 NULL,/NULL,/使用使用LocalSystemLocalSystem账户运行服务账户运行服务 NULL);/NULL);/不需要指定密码不需要指定密码

19、 if(schService=NULL)if(schService=NULL)printf(CreateService failed(%d)n,GetLastError();printf(CreateService failed(%d)n,GetLastError();CloseServiceHandle(schSCManager);CloseServiceHandle(schSCManager);return;return;else printf(Service installed successfullyn);else printf(Service installed successful

20、lyn);/关闭句柄关闭句柄 CloseServiceHandle(schService);CloseServiceHandle(schService);CloseServiceHandle(schSCManager);CloseServiceHandle(schSCManager);主函数主函数_tmain()int _tmain(int argc,_TCHAR*argv)int _tmain(int argc,_TCHAR*argv)/如果带有一个命令行参数如果带有一个命令行参数-install-install,则安装服务,则安装服务if(argc=2&!strcmp(argv1,-ins

21、tall)if(argc=2&!strcmp(argv1,-install)SvcInstall();SvcInstall();/下面是服务的代码下面是服务的代码return 0;return 0;如果带有一个命令行参数如果带有一个命令行参数-install-install,则调用,则调用SvcInstall()SvcInstall()函数安函数安装服务。下面的代码可以设计服务的具体功能,本例中省略了装服务。下面的代码可以设计服务的具体功能,本例中省略了服务的具体功能。服务的具体功能。9.2.3 打开服务打开服务SC_HANDLE WINAPI OpenService(SC_HANDLE WI

22、NAPI OpenService(_in SC_HANDLE hSCManager,_in SC_HANDLE hSCManager,/调调用用OpenSCManager()OpenSCManager()函数返回的服务控制器句柄函数返回的服务控制器句柄 _in LPCTSTR lpServiceName,/_in LPCTSTR lpServiceName,/要要打开的服务名打开的服务名 _in DWORD dwDesiredAccess _in DWORD dwDesiredAccess/对服务的访问权限对服务的访问权限););CloseServiceHandle()函数函数p对服务执行完操

23、作之后,需要调用对服务执行完操作之后,需要调用CloseServiceHandleCloseServiceHandle()()函数关闭打开的服务句柄,函数原型如下:函数关闭打开的服务句柄,函数原型如下:BOOL WINAPI CloseServiceHandle(BOOL WINAPI CloseServiceHandle(_in SC_HANDLE hSCObject _in SC_HANDLE hSCObject/要要关闭的服务句柄关闭的服务句柄););9.2.4 枚举服务列表枚举服务列表BOOL WINAPI EnumServicesStatusEx(BOOL WINAPI EnumSe

24、rvicesStatusEx(_in SC_HANDLE hSCManager,_in SC_HANDLE hSCManager,_in SC_ENUM_TYPE InfoLevel,_in SC_ENUM_TYPE InfoLevel,_in DWORD dwServiceType,_in DWORD dwServiceType,_in DWORD dwServiceState,_in DWORD dwServiceState,_out LPBYTE lpServices,_out LPBYTE lpServices,_in DWORD cbBufSize,_in DWORD cbBufSi

25、ze,_out LPDWORD pcbBytesNeeded,_out LPDWORD pcbBytesNeeded,_out LPDWORD lpServicesReturned,_out LPDWORD lpServicesReturned,_in_out LPDWORD lpResumeHandle,_in_out LPDWORD lpResumeHandle,_in LPCTSTR pszGroupName _in LPCTSTR pszGroupName););【例【例9.4】编写程序,枚举并打印系统服务编写程序,枚举并打印系统服务。代码见书。代码见书。9.2.5 启动服务启动服务B

26、OOL WINAPI StartService(BOOL WINAPI StartService(_in SC_HANDLE hService,_in SC_HANDLE hService,/要要启动的服务的句柄启动的服务的句柄 _in DWORD dwNumServiceArgs,_in DWORD dwNumServiceArgs,/指指定定lpServiceArgVectorslpServiceArgVectors数组中的字符串的数量数组中的字符串的数量 _in LPCTSTR*lpServiceArgVectors _in LPCTSTR*lpServiceArgVectors/启动服

27、务时的参数数组启动服务时的参数数组););p如果函数执行成功,则函数返回如果函数执行成功,则函数返回TRUETRUE;否则返回;否则返回FALSEFALSE。【例【例9.5】p编写程序,启动服务编写程序,启动服务WebClientWebClient,代码如下:,代码如下:#include stdafx.h#include stdafx.h#include#include#include#include int _tmain(int argc,_TCHAR*argv)int _tmain(int argc,_TCHAR*argv)SC_HANDLE hSC;/SC_HANDLE hSC;/服务管

28、理器句柄服务管理器句柄SC_HANDLE handle;SC_HANDLE handle;/服务句柄服务句柄hSC=:OpenSCManager(NULL,/*SERVICES_ACTIVE_DATABASE*/NULL,hSC=:OpenSCManager(NULL,/*SERVICES_ACTIVE_DATABASE*/NULL,SC_MANAGER_ALL_ACCESS);SC_MANAGER_ALL_ACCESS);if(hSC=NULL)if(hSC=NULL)printf(printf(无法连接服务管理器!无法连接服务管理器!););return 1;return 1;handle

29、=:OpenService(hSC,WebClient,SERVICE_ALL_ACCESS);handle=:OpenService(hSC,WebClient,SERVICE_ALL_ACCESS);接上接上if(handle=NULL)if(handle=NULL)printf(printf(无法打开服务!无法打开服务!););return 1;return 1;if(:StartService(handle,NULL,NULL)=FALSE)if(:StartService(handle,NULL,NULL)=FALSE)printf(printf(无法启动服务!无法启动服务!););

30、return 2;return 2;return 0;return 0;9.2.6 停止服务停止服务p调用调用ControlService()ControlService()函数可以停止指函数可以停止指定的服务,函数原型如下:定的服务,函数原型如下:BOOL WINAPI ControlService(BOOL WINAPI ControlService(_in SC_HANDLE hService,_in SC_HANDLE hService,/要停止的服务的要停止的服务的句柄句柄 _in DWORD dwControl,_in DWORD dwControl,/制定一个控制代制定一个控制代

31、码码 _out LPSERVICE_STATUS lpServiceStatus/_out LPSERVICE_STATUS lpServiceStatus/指向一个指向一个SERVICE_STATUSSERVICE_STATUS结构体,结构体,用于接收服务状态用于接收服务状态););【例【例9.6】p编写程序,停止服务编写程序,停止服务WebClientWebClient,代码如下:,代码如下:#include stdafx.h#include stdafx.h#include#include#include#include int _tmain(int argc,_TCHAR*argv)i

32、nt _tmain(int argc,_TCHAR*argv)SC_HANDLE hSC;/SC_HANDLE hSC;/服务管理器句柄服务管理器句柄SC_HANDLE handle;SC_HANDLE handle;/服务句柄服务句柄hSC=:OpenSCManager(NULL,/*SERVICES_ACTIVE_DATABASE*/NULL,hSC=:OpenSCManager(NULL,/*SERVICES_ACTIVE_DATABASE*/NULL,SC_MANAGER_ALL_ACCESS);SC_MANAGER_ALL_ACCESS);if(hSC=NULL)if(hSC=NUL

33、L)printf(printf(无法连接服务管理器!无法连接服务管理器!););return 1;return 1;handle=:OpenService(hSC,WebClient,SERVICE_ALL_ACCESS);handle=:OpenService(hSC,WebClient,SERVICE_ALL_ACCESS);接上接上if(handle=NULL)if(handle=NULL)printf(printf(无法打开服务!无法打开服务!););return 2;return 2;SERVICE_STATUS status;SERVICE_STATUS status;if(:Co

34、ntrolService(handle,SERVICE_CONTROL_STOP,if(:ControlService(handle,SERVICE_CONTROL_STOP,&status)=FALSE)&status)=FALSE)printf(printf(无法停止服务!无法停止服务!););return 3;return 3;return 0;return 0;9.2.7 查询服务的状态查询服务的状态p调用调用QueryServiceStatusEx()QueryServiceStatusEx()函数可以查询指定服务的状态,函数可以查询指定服务的状态,函数原型如下:函数原型如下:BOO

35、L WINAPI QueryServiceStatus(BOOL WINAPI QueryServiceStatus(_in SC_HANDLE hService,_in SC_HANDLE hService,/服务的句柄服务的句柄 _out LPSERVICE_STATUS lpServiceStatus/_out LPSERVICE_STATUS lpServiceStatus/使用使用SERVICE_STATUSSERVICE_STATUS结构体,用于接收服务的状态结构体,用于接收服务的状态););SERVICE_STATUS结构体结构体typedef struct _SERVICE_S

36、TATUS typedef struct _SERVICE_STATUS DWORD dwServiceType;DWORD dwServiceType;DWORD dwCurrentState;DWORD dwCurrentState;DWORD dwControlsAccepted;DWORD dwControlsAccepted;DWORD dwWin32ExitCode;DWORD dwWin32ExitCode;DWORD dwServiceSpecificExitCode;DWORD dwServiceSpecificExitCode;DWORD dwCheckPoint;DWOR

37、D dwCheckPoint;DWORD dwWaitHint;DWORD dwWaitHint;SERVICE_STATUS,SERVICE_STATUS,*LPSERVICE_STATUS;*LPSERVICE_STATUS;【例【例9.7】p编写程序,查询服务编写程序,查询服务WebClientWebClient的状态,代码如下:的状态,代码如下:#include stdafx.h#include stdafx.h#include#include#include#include int _tmain(int argc,_TCHAR*argv)int _tmain(int argc,_TC

38、HAR*argv)SC_HANDLE hSC;/SC_HANDLE hSC;/服务管理器句柄服务管理器句柄SC_HANDLE handle;SC_HANDLE handle;/服务句柄服务句柄hSC=:OpenSCManager(NULL,/*SERVICES_ACTIVE_DATABASE*/NULL,hSC=:OpenSCManager(NULL,/*SERVICES_ACTIVE_DATABASE*/NULL,SC_MANAGER_ALL_ACCESS);SC_MANAGER_ALL_ACCESS);if(hSC=NULL)if(hSC=NULL)printf(printf(无法连接服务

39、管理器!无法连接服务管理器!n);n);return 1;return 1;handle=:OpenService(hSC,WebClient,SERVICE_ALL_ACCESS);handle=:OpenService(hSC,WebClient,SERVICE_ALL_ACCESS);接上接上if(handle=NULL)if(handle=NULL)printf(printf(无法打开服务!无法打开服务!n);n);return 2;return 2;SERVICE_STATUS status;SERVICE_STATUS status;/获取服务的状态获取服务的状态 if(:Quer

40、yServiceStatus(handle,&status)=FALSE)if(:QueryServiceStatus(handle,&status)=FALSE)printf(printf(获取服务状态错误获取服务状态错误n);n);return 3;return 3;switch(status.dwCurrentState)switch(status.dwCurrentState)case SERVICE_CONTINUE_PENDING:case SERVICE_CONTINUE_PENDING:printf(printf(恢复服务操作被挂起恢复服务操作被挂起n);n);break;br

41、eak;case SERVICE_PAUSE_PENDING:case SERVICE_PAUSE_PENDING:printf(printf(暂停服务操作被挂起暂停服务操作被挂起n);n);break;break;接上接上case SERVICE_PAUSED:case SERVICE_PAUSED:printf(printf(服务被暂停服务被暂停n);n);break;break;case SERVICE_RUNNING:case SERVICE_RUNNING:printf(printf(服务正在运行服务正在运行n);n);break;break;case SERVICE_START_P

42、ENDING:case SERVICE_START_PENDING:printf(printf(服务正在启动服务正在启动n);n);break;break;case SERVICE_STOP_PENDING:case SERVICE_STOP_PENDING:printf(printf(服务正在停止服务正在停止n);n);break;break;case SERVICE_STOPPED:case SERVICE_STOPPED:printf(printf(服务没有运行服务没有运行n);n);break;break;default:default:printf(printf(未知状态未知状态n)

43、;n);break;break;system(pause);system(pause);return 0;return 0;9.2.8 修改修改服务的服务的配置参数配置参数p调用调用ChangeServiceConfig()ChangeServiceConfig()函数可以修改指定服务的配置参数,函数原型如下:函数可以修改指定服务的配置参数,函数原型如下:BOOL WINAPI ChangeServiceConfig(BOOL WINAPI ChangeServiceConfig(_in SC_HANDLE hService,_in SC_HANDLE hService,/服务句柄服务句柄 _

44、in DWORD dwServiceType,_in DWORD dwServiceType,/服务类型服务类型 _in DWORD dwStartType,_in DWORD dwStartType,/服务启动类型服务启动类型 _in DWORD dwErrorControl,_in DWORD dwErrorControl,/指定错误的严重程度指定错误的严重程度 _in LPCTSTR lpBinaryPathName,/_in LPCTSTR lpBinaryPathName,/服务的可执行文件的路径服务的可执行文件的路径 _in LPCTSTR lpLoadOrderGroup,/_i

45、n LPCTSTR lpLoadOrderGroup,/服务所述的加载顺序组服务所述的加载顺序组 _out LPDWORD lpdwTagId,/_out LPDWORD lpdwTagId,/用于接收在参数用于接收在参数lpLoadOrderGrouplpLoadOrderGroup指定的组中的一个唯一指定的组中的一个唯一标记标记 _in LPCTSTR lpDependencies,/_in LPCTSTR lpDependencies,/包含服务名或加载顺序组名的数组,指定服务的依包含服务名或加载顺序组名的数组,指定服务的依赖关系。数组中的服务和组必须在创建的服务之前被启动赖关系。数组中

46、的服务和组必须在创建的服务之前被启动 _in LPCTSTR lpServiceStartName,/_in LPCTSTR lpServiceStartName,/运行服务的账户名运行服务的账户名 _in LPCTSTR lpPassword,/_in LPCTSTR lpPassword,/参数参数lpServiceStartNamelpServiceStartName指定的账户的密码指定的账户的密码 _in LPCTSTR lpDisplayName/_in LPCTSTR lpDisplayName/服务的显示名服务的显示名););【例【例9.8】p编写程序,将服务编写程序,将服务We

47、bClientWebClient的启动状态设置为自动,代码如下:的启动状态设置为自动,代码如下:pp#include stdafx.h#include stdafx.hp#include#include p#include#include pppint _tmain(int argc,_TCHAR*argv)int _tmain(int argc,_TCHAR*argv)p pSC_HANDLE hSC;/SC_HANDLE hSC;/服务管理器句柄服务管理器句柄pSC_HANDLE handle;SC_HANDLE handle;/服务句柄服务句柄pphSC=:OpenSCManager(N

48、ULL,/*SERVICES_ACTIVE_DATABASE*/NULL,SERVICE_CHANGE_CONFIG);hSC=:OpenSCManager(NULL,/*SERVICES_ACTIVE_DATABASE*/NULL,SERVICE_CHANGE_CONFIG);pif(hSC=NULL)if(hSC=NULL)p pprintf(printf(无法连接服务管理器!无法连接服务管理器!n);n);preturn 1;return 1;p phandle=:OpenService(hSC,WebClient,SERVICE_CHANGE_CONFIG);handle=:OpenS

49、ervice(hSC,WebClient,SERVICE_CHANGE_CONFIG);pif(handle=NULL)if(handle=NULL)p pprintf(printf(无法打开服务!无法打开服务!n);n);preturn 2;return 2;p p接上接上:ChangeServiceConfig(handle,SERVICE_NO_CHANGE,:ChangeServiceConfig(handle,SERVICE_NO_CHANGE,SERVICE_AUTO_START,SERVICE_AUTO_START,/修改服务为自动启动修改服务为自动启动NULL,NULL,NUL

50、L,NULL,NULL,NULL,NULL,NULL);NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);:CloseServiceHandle(handle);:CloseServiceHandle(handle);return 0;return 0;ChangeServiceConfig2()函数函数p调用调用ChangeServiceConfig2()ChangeServiceConfig2()函数可以修改指定服务的函数可以修改指定服务的可选配置参数,函数原型如下:可选配置参数,函数原型如下:BOOL WINAPI ChangeServiceConfig2

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁