NT Service的几个注意点和示例代码
来源:互联网 发布:mac sass安装出错 编辑:程序博客网 时间:2024/05/18 18:17
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">如何编写NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">NT ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">MSDN->Platform SDK->DLLs, Processes, and Threads->ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">中说得很清楚了,在这里我就不多说了,这里我就只说一些我个人认为的在编写NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">过程中要注意的地方。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">0NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">、在我们通过控制面板或NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">NET STARTNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">命令启动一个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">时,NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体"> NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service CoNTrol Manager (SCM)NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">从注册表里拿到NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">的可执行程序名,然后运行这个程序,从程序的入口NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">方法里得到NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">方法,然后就进入NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">运行。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">一个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">程序包含最少包含三个部分,一个是NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">方法,通常的工作是设置NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">方法和处理命令行参数NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">(NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">例如根据不同的参数执行其他的动作,象安装卸载NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">,手动启动停止NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">等等NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">)NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">;一个是NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">方法,NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">程序具体要做的工作就写在这个方法里;一个是NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceCtrlHandlerNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">方法,这个方法在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">里设置,用来处理由NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">SCMNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">发给NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">的消息,例如NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">停止,暂停,系统关机等等。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">1NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">、手动启动一个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的方法是在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">方法里调用NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">StartServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">,NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">StartServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">根据NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_TABLE_ENTRYNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">将程序转入相应的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">。NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">启动NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">时所要作的工作是写在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">里的。通常的模式是在进入NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">后设状态为NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_START_PENDINGNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">,然后进行一些初始化动作,然后执行一个线程或进程,在其中进行NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的工作,然后设状态为NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_RUNNINGNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">。一定要注意的是,启动NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">后,必须保证在两分钟内NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的状态就会被设成NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_RUNNINGNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">,否则会报错。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">2NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">、停止一个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的方法是在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">方法里调用NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">CoNTrolService(hService,Service_CONTROL_STOP,&ServStat)NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">发送NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_CONTROL_STOPNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">消息到NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service CoNTrol Manager (SCM)NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">,NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">SCMNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">收到这个消息后就会通知NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">,执行NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceCtrlHandlerNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">里NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">case Service_CONTROL_STOP:NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">内的工作。结束动作通常也不能太久,因为在关机时,系统会给每个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">大概NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">20NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">秒时间清场NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">(NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">这个时间可以在注册表中设置NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">)
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">3NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">、安装和卸载一个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的方法是在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">方法里调用NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">CreateServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">方法和NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">DeleteServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">方法,卸载方法前先要判断NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">是否在运行,如果在运行要先将服务停止NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">否则无法删除。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">4NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">、NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">设置NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">状态的方法是调用NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">SetServiceStatusNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">,在写NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">的启动和停止动作是要设置其状态,分别在上面提到的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">和NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ServiceCtrlHandlerNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">里。NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">查询NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">状态的方法NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">是NT-SIZE: 10pt; FONT-FAMILY: Verdana">QueryServiceStatus
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">,在停止服务时,
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">CoNTrolServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">方法只是发送了一个消息后就立即返回了,因此通常要在执行完NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">CoNTrolServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">后,利用NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">whileNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">、NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">sleepNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">和NT-SIZE: 10pt; FONT-FAMILY: Verdana">QueryServiceStatus
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">来不断查询
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">Service
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">的状态,直到状态为
NT-SIZE: 10pt; FONT-FAMILY: Verdana">Service_STOPPED
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">。
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">StartServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">与NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">CoNTrolServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">不同,并不是立即返回的,它会直到NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">内的代码执行完后才返回。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">5NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">、NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">即使NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">返回,NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">的程序NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">进程也NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">不会退出,直到NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">状态为NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">Service_STOPPEDNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">时,才会终止并退出。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">6NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">、在设置NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">状态时,通过指定NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">dwWin32ExitCodeNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">和NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">dwServiceSpecificExitCodeNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">可以设定当NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">在此状态下出错时的弹出式NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">MessageNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">。不过只能设定一个错误代码。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">7NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">、使用NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ChangeServiceConfig2NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">添加修改NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">的描述。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">8NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">、默认情况下NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">程序是不能与桌面交互的,即不能打开窗口。通过NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">ChangeServiceConfigNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">函数设定NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">Service_INTERACTIVE_PROCESSNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">属性,或通过控制面板选中NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">"NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">允许服务NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">与桌面交互NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">",NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">则服务程序可以打开窗口。例如在服务中使用NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">CreateProcessNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">创建了一个进程,只要在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">STARTUPINFONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">wShowWindowNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">和NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">dwFlagsNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">设定了NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">SW_SHOWNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">和NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">STARTF_USESHOWWINDOWNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">,则进程就会在打开的一个新窗口中运行。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">9NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">、不论是否设定NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_INTERACTIVE_PROCESSNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">,在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">中都可以通过NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">MessageBoxNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">方法弹出NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">MessageBoxNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">。这个函数的第一个参数指定为NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">NULLNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">,表示不指定父窗口。NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">在第四个参数中指定NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">MB_DEFAULT_DESKTOP_ONLYNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">或NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-foNT-family: 宋体">MB_Service_NOTIFICATIONNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-foNT-family: Verdana">表示以桌面为父窗口。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">10NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">.如果要停止的一个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">上有其他正在运行的服务依赖着,这时直接NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">停止这个服务就会出错,因此如果需要停止的服务有可能被其他服务所依赖,在停止前必须用NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN">EnumDependeNTServices
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">()
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">方法取得所有依赖于这个服务的服务,将这些服务依次停止后才行。具体代码示例请看
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">MSDN
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">->NT-weight: bold">HOWTO->ID:Q245230NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana; mso-bidi-foNT-weight: bold">。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-weight: bold">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-weight: bold">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">11NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">、启动NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">时可以使用启动参数,在定义NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">方法时其两个参数NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">(DWORD argc, LPTSTR *argv)NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">,第一个即为参数个数,第二个则是一个参数数组指针。如何传入参数呢,由于NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">并不是程序入口,因此参数是通过NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">从命令行传至NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">StartServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">方法,而调用NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">StartServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">时,NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">StartServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的第二第三个参数,就是传入NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的参数。如果NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">是NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">auto-startedNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的,每次开机时就会自动启动,没有给我们手工通过命令行传入参数的机会,这时我们只有在安装NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-hansi-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana">的时候,就把参数传入。在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">CreateServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">时,将NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">CreateServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-style: italic">lpBinaryPathNameNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana; mso-bidi-foNT-style: italic">值设成例如NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-style: italic">SimpleService.exe arg1 arg2NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana; mso-bidi-foNT-style: italic">的样子,这样每当NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-style: italic">SCMNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana; mso-bidi-foNT-style: italic">启动NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-style: italic">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana; mso-bidi-foNT-style: italic">时NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-style: italic">SCMNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana; mso-bidi-foNT-style: italic">就会从NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-style: italic">mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana; mso-bidi-foNT-style: italic">方法中获得参数并将其传入这个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-style: italic">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana; mso-bidi-foNT-style: italic">的NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-style: italic">Service_mainNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana; mso-bidi-foNT-style: italic">中。NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体; mso-bidi-foNT-style: italic">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">
NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">12NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">.在启动一个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">之后,在NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">的状态是NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">”NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">已启动NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">(Service_RUNNING)”NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">之前,这段时间内,是无法启动另一个NT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-fareast-language: ZH-CN; mso-fareast-foNT-family: 宋体">ServiceNT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">的。
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">例子代码:
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">#include
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">#define Service_NAME "TSService"#define Service_DISPNAME "vPBX PathFinder TSService"#define Service_DESCRIPTIONNAME "Start vPBX PathFinder Service"#define Service_EXENAME "ServiceFrame.exe">/ServiceFrame.exe"#define LOG_FILENAME "Service.log">/Service.log"#define START_EXENAME "/vpbxw.exe"#define STOP_EXENAME "/StopServer.exe"#define CMD_EXENAME " -svc"#define REG_ITEM "SOFTWARE/VisionNex/vPBX_Server"#define REG_KEY "home"#define FLAG_FILENAME "/PortKeeper.svc"#define START_DELAY 10000#define STOP_DELAY 2000#define COUNT_DELAY 50#define TIME_DELAY 2000
NT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-foNT-family: Verdana; mso-hansi-foNT-family: Verdana">Service_STATUS m_ServiceStatus;Service_STATUS_HANDLE m_ServiceStatusHandle;BOOL bRunning=false;char Path[256];
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv);void WINAPI ServiceCtrlHandler(DWORD Opcode);
BOOL InstallService(iNT flag);BOOL DeleteService();BOOL StartupService();BOOL StopService();BOOL ChangeService();
BOOL EndService();BOOL QueryReg ();DWORD GetStatus(SC_HANDLE Service);void LogService(char* error);BOOL TestTs(iNT sleep, iNT couNT, iNT sec);BOOL WaitTsStartup(iNT sleep, iNT couNT, iNT sec);
iNT main(iNT argc, char* argv[]){ if(!QueryReg()) return 1; if(argc>1) { if(strcmp(argv[1],"-i")==0) { InstallService(0); } else if (strcmp(argv[1],"-id")==0){ InstallService(1); } else if(strcmp(argv[1],"-d")==0) { DeleteService(); } else if(strcmp(argv[1],"-r")==0) { StartupService(); } else if(strcmp(argv[1],"-s")==0) { StopService(); } else if(strcmp(argv[1],"-c")==0) { ChangeService(); } else if(strcmp(argv[1],"-v")==0) { priNTf("serivce frame version:1.0.0.5: debug=pipe(limit -0.3)"); } else { priNTf("Unknown Switch UsageFor install use -i, for uninstall use -d, for run use -r, for stop use -s"); } } else { Service_TABLE_ENTRY DispatchTable[]={{Service_NAME, ServiceMain},{NULL,NULL}}; StartServiceCtrlDispatcher(DispatchTable); } return 0;}
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv){ DWORD status; DWORD specificError; LogService("Service Startup..."); m_ServiceStatus.dwServiceType = Service_WIN32; m_ServiceStatus.dwCurreNTState = Service_START_PENDING; m_ServiceStatus.dwCoNTrolsAccepted = Service_ACCEPT_STOP | Service_ACCEPT_SHUTDOWN; m_ServiceStatus.dwWin32ExitCode = 0; m_ServiceStatus.dwServiceSpecificExitCode = 0; m_ServiceStatus.dwCheckPoiNT = 0; m_ServiceStatus.dwWaitHiNT = 0; m_ServiceStatusHandle = RegisterServiceCtrlHandler(Service_NAME, ServiceCtrlHandler); if (m_ServiceStatusHandle == (Service_STATUS_HANDLE)0) { LogService("Error: RegisterServiceCtrlHandler"); return; } /* //create pipe SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE;/* if (!CreatePipe(&hRead,&hWrite,&sa,0)) { LogService("Error On CreatePipe()"); } //--------- hWrite = CreateFile("d:/process.log",GENERIC_WRITE, FILE_SHARE_READ, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); */
PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); char strDir[256]; char strDir_stop[256]; strcpy(strDir,Path); strcpy(strDir_stop,Path); strcat(strDir,START_EXENAME); strcat(strDir_stop,STOP_EXENAME); LPCTSTR lpszBinaryPathName=strDir; LPCTSTR lpszBinaryPathName_stop=strDir_stop;
LogService("Start Create StopServer process"); if(!CreateProcess(lpszBinaryPathName_stop, CMD_EXENAME, NULL,NULL,FALSE,0,NULL,Path,&sinfo,&pinfo)) { LogService("Error: CreateProcess:stop befor start"); return; } Sleep(STOP_DELAY);
ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); //Set Process output //sinfo.hStdError = hWrite; //sinfo.hStdOutput = hWrite; sinfo.wShowWindow = SW_SHOW; sinfo.dwFlags = STARTF_USESHOWWINDOW ;//| STARTF_USESTDHANDLES; LogService("Start Create vPBXW process"); if(!CreateProcess(lpszBinaryPathName, CMD_EXENAME, NULL,NULL,TRUE,0,NULL,Path,&sinfo,&pinfo)) { LogService("Error: CreateProcess:start"); m_ServiceStatus.dwCurreNTState = Service_STOPPED; m_ServiceStatus.dwCheckPoiNT = 0; m_ServiceStatus.dwWaitHiNT = 0; m_ServiceStatus.dwWin32ExitCode = ERROR_Service_SPECIFIC_ERROR; m_ServiceStatus.dwServiceSpecificExitCode = 0; SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus); return; } //CloseHandle(hWrite); LogService("Created vPBXW process"); //read pipe /* char buffer[4096] = {0}; DWORD bytesRead = 0; iNT i =1; while (3) { i = i -1; BOOL ret = ReadFile(hRead,buffer,4095,&bytesRead,NULL); if (ret == NULL){ LogService("Read return NULL"); break; } if(ret == 0){ LogService("Read return 0"); break; } if(bytesRead == 0){ LogService("Read size 0"); } else{ LogService("Read Success"); buffer[bytesRead]=0; LogService(buffer); } } //-----*/
if(!TestTs(START_DELAY,COUNT_DELAY,TIME_DELAY)){ CloseHandle(pinfo.hThread); CloseHandle(pinfo.hProcess); // CloseHandle(hRead); return; }
m_ServiceStatus.dwCurreNTState = Service_RUNNING; m_ServiceStatus.dwCheckPoiNT = 0; m_ServiceStatus.dwWaitHiNT = 0; if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus)) { LogService("Error: SetServiceStatus:Service_RUNNING"); return; }
CloseHandle(pinfo.hThread); CloseHandle(pinfo.hProcess);//CloseHandle(hRead); return; }
BOOL EndService(){ PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); char strDir[256]; strcpy(strDir,Path); strcat(strDir,STOP_EXENAME); LPCTSTR lpszBinaryPathName=strDir; if(!CreateProcess(lpszBinaryPathName, CMD_EXENAME, NULL,NULL,FALSE,0,NULL,Path,&sinfo,&pinfo)) { LogService("Error: CreateProcess:stop"); return false; } LogService("Service Stop..."); LogService("Service Stop OK"); CloseHandle(pinfo.hThread); CloseHandle(pinfo.hProcess); return true;}
void WINAPI ServiceCtrlHandler(DWORD Opcode){ switch(Opcode) { case Service_CONTROL_STOP: m_ServiceStatus.dwWin32ExitCode = 0; m_ServiceStatus.dwCurreNTState = Service_STOPPED; m_ServiceStatus.dwCheckPoiNT = 0; m_ServiceStatus.dwWaitHiNT = 0; SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus); bRunning=false; EndService(); break; case Service_CONTROL_SHUTDOWN: bRunning=false; EndService(); char strDir[256]; strcpy(strDir,Path); strcat(strDir,FLAG_FILENAME); remove(strDir); break; case Service_CONTROL_INTERROGATE: break; } return; }
BOOL InstallService(iNT flag){ HANDLE schSCManager,schService;
schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if (schSCManager == NULL) { priNTf("Error Installing Service"); LogService("Error: Installing Service:OpenSCManager"); return false; }
char strDir[256]; strcpy(strDir,Path); strcat(strDir,Service_EXENAME); LPCTSTR lpszBinaryPathName=strDir; schService = CreateService(schSCManager, Service_NAME, Service_DISPNAME, Service_ALL_ACCESS, // desired access Service_WIN32_OWN_PROCESS, // Service type Service_AUTO_START, // start type Service_ERROR_NORMAL, // error coNTrol type lpszBinaryPathName, // Service's binary NULL, // no load ordering group NULL, // no tag ideNTifier NULL, // no dependencies NULL, // LocalSystem accouNT NULL); // no password
if (schService == NULL) { priNTf("Error Installing Service"); LogService("Error: Installing Service:CreateService"); CloseServiceHandle(schSCManager); return false; } priNTf("Service Installed OK"); LogService("Service Installed OK");
if(flag == 1){ ChangeServiceConfig(schService,Service_WIN32_OWN_PROCESS | Service_INTERACTIVE_PROCESS, Service_NO_CHANGE, Service_NO_CHANGE, NULL, NULL,NULL,NULL,NULL,NULL,NULL); }
char description[] = Service_DESCRIPTIONNAME; Service_DESCRIPTION svrDescription; svrDescription.lpDescription = description; ChangeServiceConfig2(schService,Service_CONFIG_DESCRIPTION,&svrDescr<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- NT Service的几个注意点和示例代码
- NT Service的几个注意点和示例代码
- Service的几个注意点和示例代码
- android service几个注意点
- 关于前端代码重构注意的几个点
- %rowtype的几个注意点
- XHTML的几个注意点
- %rowtype的几个注意点
- %rowtype的几个注意点 .
- 几个重要的注意点
- python的学习和注意点初学的几个例子
- java中方法override和overload的几个注意点
- 类和接口设计的几个注意点
- SDRAM和NAND Flash的几个注意点
- QEMU+busybox 网络和用户配置的几个注意点
- MySQL安装和卸载的几个注意点
- [转] Android中Service的使用详解和注意点
- Android中Service的使用详解和注意点
- 在VC中使用Automation操纵Word和Excel
- ez_setup.py for 0.6c1 (同事李林)
- 的一些构想(从需求到数据库设计)
- 如何在MDI客户区窗口响应鼠标双击消息?
- 学习笔记(三)
- NT Service的几个注意点和示例代码
- 超越SOA:动态业务应用的新企业应用框架
- 概要设计的方法
- 日语流行口语极短句2
- SQL综合应用学习
- 微软平台嵌入式开发技术评析
- 关于memset函数的用法
- 关于求绝对值的问题
- 如何修复SQLSERVER"置疑"之(二)