c快速编写简单windows服务程序调用程序(示例)

c快速编写简单windows服务程序调用程序(示例)

ID:8801895

大小:31.03 KB

页数:11页

时间:2018-04-08

c快速编写简单windows服务程序调用程序(示例)_第1页
c快速编写简单windows服务程序调用程序(示例)_第2页
c快速编写简单windows服务程序调用程序(示例)_第3页
c快速编写简单windows服务程序调用程序(示例)_第4页
c快速编写简单windows服务程序调用程序(示例)_第5页
资源描述:

《c快速编写简单windows服务程序调用程序(示例)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、C++快速编写windows服务程序调用程序  http://hi.baidu.com/lostinwinner/item/a24e9b3e3feb89ae124b143c2012-07-1923:42:22

2、  分类: C/C++ 

3、  标签:windows服务程序  c++  快速简单  

4、字号 订阅前不久,为完成项目中某个功能,需要写个windows服务程序,定时来调用另外的一个exe程序,完成过程遇到颇多问题,作为初学者,分享一下我的整个过程.参考了多位大神的文章.资料来自网上,最后给出链接.表示感谢以下是一些基本知识,不得不耐下心去理

5、解,这对程序理解和编写非常用帮助.首先Microsoft Windows服务(即,以前的 NT服务)使您能够创建在它们自己的Windows会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。 服务是有状态的,当我们使用windows自带的服务管理程序sc.exe查看服务状态时可以显示服务的当前状态,

6、这个状态是由我们在程序代码中进行控制的。你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。这个状态信息你会在sc.exe中看到。 在编写windows服务程序过程中你需要关注的函数有: 1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main而不是WinMain()。在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY分派

7、表结构体,然后调用StartServiceCtrlDispatcher();这将把调用进程的主线程转换为控制分派器。该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。ServiceMain()函数将在下面提到。 此过程示例代码如下: SERVICE_TABLE_ENTRYentrytable[2];   entrytable[0].lpServiceName="testservice";   entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)Serv

8、iceMain;   entrytable[1].lpServiceName=NULL;   entrytable[1].lpServiceProc=NULL; StartServiceCtrlDispatcher(entrytable); 在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。 2.ServiceMain函数为voidWINAPIServiceMain(intargc,char**argv)格式的函数,函数名字可以任意定义。它的作用就是

9、:将你需要执行的任务放到该函数中循环执行即可。这就是服务程序的工作函数。在ServiceMain执行你的任务前,需要给SERVICE_TABLE_ENTRY分派表结构体进行赋值,注意由于此时服务还没有开始执行你的任务所以我们将服务的状态设置为SERVICE_START_PENDING,即正在初始化。我们进行如下赋值: servicestatus.dwServiceType=SERVICE_WIN32;   servicestatus.dwCurrentState=SERVICE_START_PENDING; servicestatus.dwCo

10、ntrolsAccepted=SERVICE_ACCEPT_SHUTDOWN

11、SERVICE_ACCEPT_STOP; //在本例中只接受系统关机和停止服务两种控制命令   servicestatus.dwWin32ExitCode=0;   servicestatus.dwServiceSpecificExitCode=0;   servicestatus.dwCheckPoint=0;   servicestatus.dwWaitHint=0; hstatus=::RegisterServiceCtrlHandler("testservic

12、e",CtrlHandler); CtrlHandler为voidWINAPICtrlHandler(DWORDrequest)型的函数,函数名字可以

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。