VC编写Windows服务程序

上传人:s****a 文档编号:174117910 上传时间:2022-12-14 格式:DOCX 页数:13 大小:12.07KB
收藏 版权申诉 举报 下载
VC编写Windows服务程序_第1页
第1页 / 共13页
VC编写Windows服务程序_第2页
第2页 / 共13页
VC编写Windows服务程序_第3页
第3页 / 共13页
资源描述:

《VC编写Windows服务程序》由会员分享,可在线阅读,更多相关《VC编写Windows服务程序(13页珍藏版)》请在装配图网上搜索。

1、#include #include #include TCHAR szSerVceName = _T(MyTestService);DWORD dwThreadID;HANDLE hEvent = INVALID_HANDLE_VALUE;SERVICE_STATUS status;SERVICE_STATUS_HANDLE hServiceStatus;void Init();BOOL IsServiceInstalled();BOOL InstallService();BOOL UninstallService();BOOL ServiceCtrlStart();BOOL ServiceC

2、trlStop();void WINAPI ServiceMain();wid WINAPI ServiceStrl(DWORD dwOpcode);void LogEvent(LPCTSTR pszFormat, .);/Usuage/ Install service:/TestSerUce.exe /install/ Uninstall service:/TestSerUce.exe /uninstall/ Start service:/TestSerUce.exe /start/ Stop service:/TestSerUce.exe /stopInit();dwThreadID =

3、:GetCurrentThreadld();SERVICE_TABLE_ENTRY st=_”NULL,NULLLPSTR lpCmdLine = argv1;BOOL bRet;bRet = InstallService();printf( Install service %s success, szServiceName );elsebRet = UninstallService();printf( Uninstall service %s success, szServiceName );else_)l = Seprintf( Start service %s success, szSe

4、rviceName );else一 g %s failed,);_)l =;)printf( Stop service %s success, szServiceName );elseelse_else/初始化相关结构hServiceStatus = NULL;status.dwSerVceType = SERVICE_WIN32_OWN_PROCESS;status.dwCurrentState = SERVICE_STOPPED;status.dwControlsAccepted = SERVICE_ACCEPT_STOP;status.dwWin32ExitCode = 0;status

5、.dwServiceSpecificExitCode = 0;status.dwCheckPoint = 0;=0;/服务主线程函数,既用户选择开启服务时调用的函数/ Register the control request handlerstatus.dwCurrentState = SERVICE_START_PENDING;status.dwControlsAccepted = SERVICE_ACCEPT_STOP;&a, mp;n, bsp; LogEvent(_T(ServiceMain);/注册服务控制hServiceStatus = RegisterServiceCtrlHan

6、dler(szServiceName, ServiceStrl);LogEvent(_T(Handler not installed);SetServiceStatus(hServiceStatus, &status);/如下代码可以为启动服务前的准备工作hEvent = :CreateEvent( NULL, TRUE, FALSE, NULL );status.dwCurrentState = SERVICE_STOPPED;SetSerVceStatus(hServiceStatus, &status);LogEvent(_T(Failure to start service);stat

7、us.dwWin32ExitCode = S_OK;status.dwCheckPoint = 0;status.dwWaitHint = 0;status.dwCurrentState = SERVICE_RUNNING;SetServiceStatus(hServiceStatus, &status);/等待用户选择停止服务,当然你也可以把你的服务代码用线程来执行,/此时这里只需等待线程结束既可。while ( WaitForSingleObject( hEvent, 1000 ) != WAIT_OBJECT_0 ) /模拟服务的运_即可g/停止服务status.dwCurrentSta

8、te = SERVICE_STOPPED;SetServiceStatus(hServiceStatus, &status);E/服务控制函数 wid WINAPI ServiceStrl(DWORD dwOpcode)Cs“_PPENDING;SetSer_/告诉服务线程停止工作:SetEvent( hEvent );LogEvent(_T(want to stopped Service);break;case SERVICE_CONTROL_PAUSE:break;case SERVICE_CONTROL_CONTINUE:break;case SERVICE_CONTROL_INTERR

9、OGATE:break;case SERVICE_CONTROL_SHUTDOWN:break;default:BBOOL bResult = FALSE;/打开服务控制管理器SC_HANDLE hSCM = :OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);f(hSCM!=NULL(/打开服务SC_HANDLE hService = :OpenService(hSCM, szServiceName, SERVICE_QUERY_CONFIG);_bResult = TRUE;:CloseServiceHandle(hService);/安装服

10、务B()if (IsServiceInstalled()return TRUE;/打开服务控制管理器SC_HANDLE hSCM = :OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);freturn FALSE;/ Get the executable file pathTCHAR szFilePathMAX_PATH;:GetModuleFileName(NULL, szFilePath, MAX_PATH);/创建服务SC_HANDLE hService = :CreateService(hSCM,szSerVceName,szSerVce

11、Name,SERVICE ALL ACCESS,SE_SERVICE_AUTO_START, /如果为SERVICE_DEMAND_START则表示此服务需手工启动SERVICE_ERROR_NORMAL,szFilePath,NULL,NULL,_T(),NULL,NULL);g=NULL):CloseServiceHandle(hSCM);:CloseSerVceHandle(hService);:CloseSerVceHandle(hSCM);return TRUE;/删除服务:00if (!lsServicelnstalled()return TRUE;SC_HANDLE hSCM =

12、 :OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);SC_HANDLE hService = :OpenService(hSCM, szServiceName, SERVICE_STOP | DELETE);E=NULL):CloseServiceHandle(hSCM);丽-SERVICE_STATUS status;:ControlService(hService, SERVICE_CONTROL_STOP, & status);/删除服务BOOL bDelete = :DeleteService(hService);:CloseSerVc

13、eHandle(hSerVce);:CloseSerVceHandle(hSCM);if (bDelete)return TRUE;LogEvent(_T(Service could not be deleted);/开启服务:一BOOL bRet;SC_HANDLE hSCM;SC_HANDLE hService;hSCM=OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); hService=OpenService( hSCM, szServiceName, SERVICE_START);)/开始 ServicebRet = StartService(h

14、Service,0,NULL);CloseServiceH andle(hService);else bRet = FA._;else bRet=FALSE;/停止服务:一BOOL bRet;SC_HANDLE hSCM;SC_HANDLE hService;SERVICE_STATUS ServiceStatus;hSCM=OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );hService=OpenService( hSCM, szServiceName, SERVICE_STOP|SERVICE_QUERY_STATUS );)Query

15、Servic eStatus( hService, & ServiceStatus );if (SerUceStatus.dwCurrentState = SERVICE_RUNNING) bR_elsel = False;elseCloseServiceHandle( hSCM );else lt = FALSE;TCHAR chMsg256;HANDLE hEventSource;LPTSTR lpszStrings1;va_list pArg;va_start(pArg, pFormat);_vstprintf(chMsg, pFormat, pArg);va_end(pArg);lpszStringsO = chMsg;hEventSource = RegisterEventSource(NULL, szServiceName);ReportEvent(hEventSource, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1,0, (LPCTSTR*) & pszStrings0, NULL);DeregisterEventSource(hEventSource);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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