Windows update 进程占用CPU和硬盘终极解决方案

先放一张搞笑的图2333333


进入正题。。


之前纳闷cpu风扇莫名转的飞快,也没开什么程序,打开任务管理器发现有个Windows update进程一直在运行(有时单独出现,有时在服务主机中),占用cpu和硬盘极高,本以为更新完就没事了,结果一直更新没见停过。。。这就不能忍了,手动关掉了Windows update 服务,见效倒是挺快,但一重启又给自动打开了。尝试了网上各种方法都没法彻底关掉更新服务。

最后想了个损招,写了个禁用更新服务的c++程序,开机自动运行,这几天终于消停了。。

exe程序下载地址:https://pan.baidu.com/s/1Gpk7_LVxXGT1En-L0IQ-3g

不放心的可以用源代码(在最底下)。

注意一定要以管理员方式运行,设置开机自动以管理员方式启动方法:

开始 -> Windows 管理工具 -> 任务计划程序 -> 操作 -> 创建基本任务





此处选择要启动的程序

选定“当单击完成时,打开此任务属性的对话框”

点击完成后:



勾选“使用最高权限运行。”,点击确定,over。

源代码:

#include
#include
using namespace std;

BOOL StopService()  
{  
    SC_HANDLE scm;  
    SC_HANDLE service;  
    if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))==NULL)  
    {  
        CloseServiceHandle(scm);
        printf("OpenSCManager Fail %d\n",GetLastError()); 
        return 0;  
    }  
    service=OpenService(scm, "wuauserv",SERVICE_ALL_ACCESS);  
    if(service == NULL)
    {   
        int c = GetLastError();
        if (c == ERROR_ACCESS_DENIED) cout<<"ERROR_ACCESS_DENIED\n";
        else if (c == ERROR_INVALID_HANDLE) cout<<"ERROR_INVALID_HANDLE\n";
        else if (c == ERROR_INVALID_NAME) cout<<"ERROR_INVALID_NAME\n";
        else if (c == ERROR_SERVICE_DOES_NOT_EXIST) cout<<"ERROR_SERVICE_DOES_NOT_EXIST\n";
        CloseServiceHandle(service);  
        CloseServiceHandle(scm);
        return 0;  
    }  
  
    SERVICE_STATUS status;  
    if(QueryServiceStatus(service,&status)){  
        if(status.dwCurrentState!=SERVICE_STOPPED) {    //如果服务当前状态为启用     
            ControlService(service,SERVICE_CONTROL_STOP,&status);  
  
            SC_LOCK sclLockA;  
            sclLockA = LockServiceDatabase(scm);  
            if (sclLockA != NULL){  
                if (! ChangeServiceConfig(  
                    service, // handle of service  
                    SERVICE_NO_CHANGE, // service type: no change  
                    SERVICE_DISABLED, // 禁用服务  
                    SERVICE_NO_CHANGE, // error control: no change  
                    NULL, // binary path: no change  
                    NULL, // load order group: no change  
                    NULL, // tag ID: no change  
                    NULL, // dependencies: no change  
                    NULL, // account name: no change  
                    NULL, // password: no change  
                    NULL)) //displayname  
                {  
                }  
            }  
              
            UnlockServiceDatabase(sclLockA);  
        }  
        else  
        {  
            SC_LOCK sclLockB;  
            sclLockB = LockServiceDatabase(scm);  
            if (sclLockB != NULL){  
                if (! ChangeServiceConfig(  
                    service, // handle of service  
                    SERVICE_NO_CHANGE, // service type: no change  
                    SERVICE_DISABLED, // 这里做了更改  
                    SERVICE_NO_CHANGE, // error control: no change  
                    NULL, // binary path: no change  
                    NULL, // load order group: no change  
                    NULL, // tag ID: no change  
                    NULL, // dependencies: no change  
                    NULL, // account name: no change  
                    NULL, // password: no change  
                    NULL)) //displayname  
                {  
  
                }  
            }  
              
            UnlockServiceDatabase(sclLockB);  
        }  
        CloseServiceHandle(service);  
        CloseServiceHandle(scm);  
    }
    cout<<"stop service success!\n";
    return TRUE;  
}

int main()
{
    StopService();
    system("pause");
    return 0;
}  

你可能感兴趣的:(Windows update 进程占用CPU和硬盘终极解决方案)