- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《C快速编写简单windows服务程序调用程序示例
C++快速编写windows服务程序调用程序??/lostinwinner/item/a24e9b3e3feb89ae124b143c2012-07-19 23:42:22|??分类:?C/C++?|??标签:windows服务程序??c++??快速简单??|字号?订阅前不久,为完成项目中某个功能,需要写个windows服务程序, 定时来调用另外的一个exe程序, 完成过程遇到颇多问题,作为初学者,分享一下我的整个过程. 参考了多位大神的文章.资料来自网上, 最后给出链接.表示感谢以下是一些基本知识, 不得不耐下心去理解,这对程序理解和编写非常用帮助.首先Microsoft ?Windows 服务(即,以前的 ?NT 服务)使您能够创建在它们自己的Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。?服务是有状态的,当我们使用windows自带的服务管理程序sc.exe 查看服务状态时可以显示服务的当前状态,这个状态是由我们在程序代码中进行控制的。你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。这个状态信息你会在sc.exe中看到。?在编写windows服务程序过程中你需要关注的函数有:?1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main 而不是WinMain()。在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY 分派表结构体,然后调用StartServiceCtrlDispatcher();这将把调用进程的主线程转换为控制分派器。该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。ServiceMain()函数将在下面提到。?此过程示例代码如下:?SERVICE_TABLE_ENTRY entrytable[2];?? ? entrytable[0].lpServiceName=testservice;?? ? entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain;?? ? entrytable[1].lpServiceName=NULL;?? ? entrytable[1].lpServiceProc=NULL;?StartServiceCtrlDispatcher(entrytable);?在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。?2.ServiceMain函数为void WINAPI ServiceMain(int argc, char** argv)格式的函数,函数名字可以任意定义。它的作用就是:将你需要执行的任务放到该函数中循环执行即可。这就是服务程序的工作函数。在ServiceMain执行你的任务前,需要给SERVICE_TABLE_ENTRY 分派表结构体进行赋值,注意由于此时服务还没有开始执行你的任务所以我们将服务的状态设置为SERVICE_START_PENDING,即正在初始化。我们进行如下赋值:?servicestatus.dwServiceType = SERVICE_WIN32; ?? ? servicestatus.dwCurrentState = SERVICE_START_PENDING; ?servicestatus.dwControlsAccepted=SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;?//在本例中只接受系统关机和停止服务两种控制命令?? ? servicestatus.dwWin32ExitCode = 0; ?? ? servicestatus.dwServiceSpecificExitCode = 0; ?? ? servicestatus.dwCheckPoint = 0; ?? ? servicestatus.dwWaitHint = 0; ?hstatus = ::RegisterServiceCtrlHandler(testservice, CtrlHandler);?CtrlHandler为void WINA
您可能关注的文档
最近下载
- 2025年江苏钟山宾馆集团有限公司校园招聘笔试模拟试题及答案解析.docx VIP
- SL176-2007 水利水电工程施工质量检验与评定规程.docx VIP
- IT运维服务智能管理平台设计与实施策略.doc VIP
- 全省组织人事系统学习贯彻《条例》培训班的辅导报告.pptx.pptx VIP
- 2023年江西机电职业技术学院教师招聘考试笔试试题及答案解析.docx VIP
- 非全日制硕士专业学位研究生学习成绩记录表(模板).doc VIP
- 配置审计报告模板.docx VIP
- 工程造价审计保密工作及风险管控制度.docx VIP
- 《建筑给排水设计》课件分享.ppt VIP
- 煤矿综采维修钳工技能理论应知应会考试题库大全-下(判断题).doc VIP
文档评论(0)