黑基网 首页 学院 系统管理 查看内容

删除Windows服务

2004-12-9 03:05| 投稿: net

摘要: 转自:i_like_cpp's blog 删除Windows服务        对于编程高手来说,这个题目有点无聊,不过在某些情...
转自:i_like_cpp's blog 删除Windows服务        对于编程高手来说,这个题目有点无聊,不过在某些情况下还是相当有用的。像我删除卸载了一个软件,结果什么都删除了,结果服务还在那儿,很不雅观,找遍注册表都找不到,只好自己动手写了个小程序来删除服务。    首先做好界面,如下:        这要用到Windows的服务管理函数组,首先要打开服务管理器,这要在头文件中包含winsvc.h   把SC_HANDLE  sh;定义加入对话框类中。   在OnInitDialog成员函数中加入如下代码,以初始化服务管理。sh=OpenSCManager(0,SERVICES_ACTIVE_DATABASE,SC_MANAGER_ALL_ACCESS); if(!sh) {  MessageBox("faile to Open SCManager");  return FALSE; }在OnClose成员函数中加入CloseServiceHandle(sh); 然后处理两个按钮事件void CdelsDlg::ListServices(){ // TODO: Add your control notification handler code here DWORD eh=0,d1,nret,i; BOOL ret; SCV.ResetContent(); ret=EnumServicesStatus(sh,SERVICE_WIN32|SERVICE_DRIVER,  SERVICE_INACTIVE,ess,sizeof(ess),&d1,&nret,&eh); if(!ret) {  char temp[32];  sprintf(temp,"%d",GetLastError());  MessageBox(temp);  MessageBox("failed to enum services");  return; } for(i=0;i<nret;i++) {  SCV.AddString(ess[i].lpDisplayName); }} void CdelsDlg::DelService(){ // TODO: Add your control notification handler code here int i,ret; char temp[256]; i=SCV.GetCurSel(); sprintf(temp,"Do you realy want to remove the service\r\n"  "%d:\t%s\r\n%s",i,ess[i].lpServiceName,ess[i].lpDisplayName); ret=MessageBox(temp,"Alert!",MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2); if(ret==IDYES) {  SC_HANDLE ds;  ds=OpenService(sh,ess[i].lpServiceName,SC_MANAGER_ALL_ACCESS);  if(!ds)  {   MessageBox("Failed to Open Service");   return;  }  if(DeleteService(ds))  {   MessageBox("Success to remove the service");  }  else  {   sprintf(temp,"Failed to remove the service\r\nERROR CODE:\t%d",    GetLastError());   MessageBox(temp);  }  CloseServiceHandle(ds); }}前者枚举不活动的服务,并把它加入列表框,后者直接删除对应服务   
小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论


新出炉

返回顶部