WindowsNT下Service编程
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-30
******************** * 枚举NT系统当服务并启动或终止之。 * Edited by 黑山老妖 * 2002.8.9 ****************************************************************************/ void __fastcall TForm1::Button1Click(TObject *Sender) { DWORD BytesNeeded,serviceReturned,resumeHandle; bool returnflag; TEnumServiceStatus lpservice[100]; TEnumServiceStatus service; DWORD i,bytes; ListBox1->Items->Clear(); returnflag=false; resumeHandle=0; hscmanager=OpenSCManager(NULL,NULL,SC_MANAGER_ENUMERATE_SERVICE);//打开service control manager database if (hscmanager<0) { ShowMessage("无法打开service control manager database"); return; } returnflag=EnumServicesStatus(hscmanager,SERVICE_DRIVER,SERVICE_ACTIVE,&service,sizeof(service),&BytesNeeded,&serviceReturned,&resumeHandle);//枚举Service if(!returnflag&&GetLastError()==ERROR_MORE_DATA) { bytes=BytesNeeded+sizeof(TEnumServiceStatus); EnumServicesStatus(hscmanager,SERVICE_DRIVER,SERVICE_ACTIVE,&lpservice[0],bytes,&BytesNeeded,&serviceReturned,&resumeHandle); for(i=0;i<serviceReturned-1;i++) { ListBox1->Items->Add(lpservice[i].lpServiceName); } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { int i; for(i=0;i<ListBox1->Items->Count;i++) { if(ListBox1->Selected[i]) { hService=OpenService(hscmanager,PChar(ListBox1->Items->Strings[i].c_str()),SERVICE_ALL_ACCESS);//打开该Service if(hService<0) { ShowMessage("无法打开该服务!"); return; } QueryServiceStatus(hService,&returnstatus);//查看该Service的状态 if(returnstatus.dwCurrentState==SERVICE_STOPPED)//如果该Service已停止则启动它 //SERVICE_STOPPED==1,SERVICE_RUNNING==4 老妖注。 { if(StartService(hService,0,NULL)) ShowMessage("启动成功!"); else ShowMessage("无法启动该服务!"); } CloseServiceHandle(hService);//关闭该Service } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { int i; for(i=0;i<ListBox1->Items->Count;i++) { if(ListBox1->Selected[i]) { hService=OpenService(hscmanager,PChar(ListBox1->Items->Strings[i].c_str()),SERVICE_ALL_ACCESS);//打开该Service if(hService<0) { ShowMessage("无法打开该Service"); return; } QueryServiceStatus(hService,&returnstatus);//查看该Service的状态 if(returnstatus.dwCurrentState==SERVICE_RUNNING) //如果该Service正在运行则停止它 { if(ControlService(hService,SERVICE_CONTROL_STOP,&returnstatus)) ShowMessage("成功停止!"); else ShowMessage("无法停止该服务!"); } CloseServiceHandle(hService);//关闭该Service } } } //--------------------------------------------------------------------------- void __fastcall TForm1: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 用CB控制Windows注册表下一篇: Windows服务编写原理及探讨(2)
关于WindowsNT下Service编程的所有评论