删除Windows服务open in new window

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

首先做好界面,如下:

这要用到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);
    }
}

前者枚举不活动的服务,并把它加入列表框,后者直接删除对应服务

发表于 2004年12月08日 5:15 PM


回复:删除Windows服务 2004-12-08 11:06 PM Meteor

windows 自带的有个程序

sc.exe
sc delete 服务名字

而且2003下面是中文界面的了

可以删除

Contributors: FHL