宁夏IT网_中关村在线宁夏分站
首页 > 宁夏IT网,中关村在线宁夏站 > 网络学院 > 操作系统 > 正文
全文

删除Windows服务

来源:i_like_cpp 录入时间:07-02-14 16:57:29

对于编程高手来说,这个题目有点无聊,不过在某些情况下还是相当有用的。像我删除卸载了一个软件,结果什么都删除了,结果服务还在那儿,很不雅观,找遍注册表都找不到,只好自己动手写了个小程序来删除服务。

  首先做好界面,如下:

 

  这要用到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.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.lpServiceName,ess.lpDisplayName); ret=MessageBox(temp,"Alert!",MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2); if(ret==IDYES) { SC_HANDLE ds; ds=OpenService(sh,ess.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); }}
前者枚举不活动的服务,并把它加入列表框,后者直接删除对应服务
·上一篇文章:
·下一篇文章:
发送好友:发送给好友 | 加入收藏:加入收藏夹 责任编辑:枫舞花落 文章作者:
版权声明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有
转载 要求转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。
本地行情
厂商动态
手机
数码
学院