真正意义上的编程实现关闭Windows自动更新服务
昨天在群里看Ta分享了一个关闭Windows10的自动更新服务的方法,不过使用的是Reg文件加批处理,虽然很简单很实用。但是作为我等小菜鸟,还是崇尚装逼,把该方法用高级语言写了一遍。
#include "stdafx.h"
#include <Windows.h>
#include <winsvc.h>
#include <stdio.h>
#include <conio.h>
BOOL Stop_Windows_UpdateData(HANDLE);
BOOL Disable_Windows_UpdateData(HANDLE);
int _tmain(int argc, _TCHAR* argv[])
{
HANDLEhConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole,0x0D);
SetConsoleTitle(L"欢迎使用 Windows 10自动更新服务关闭工具 BY:伤城 请在管理员权限下运行!");
printf("欢迎使用 Windows 10自动更新服务关闭工具 BY:伤城 请在管理员权限下运行!\n按任意键开始......\n");
getch();
if (Stop_Windows_UpdateData(hConsole) && Disable_Windows_UpdateData(hConsole))
{
SetConsoleTextAttribute(hConsole,FOREGROUND_GREEN);
SetConsoleTitle(L"Windows 10自动更新服务已经成功关闭,感谢你的使用!");
printf("\n\nWindows 10自动更新服务已经成功关闭,感谢你的使用!\n按任意键退出......\n");
getch();
return 0;
}
return 0;
}
BOOL Stop_Windows_UpdateData(HANDLE hConsole)
{
SC_HANDLE hSCM;
SC_HANDLE hSvc;
BOOL bRet;
SERVICE_STATUS status;
hSCM = ::OpenSCManager(NULL, NULL,GENERIC_EXECUTE);
if (!hSCM)
{
printf("打开服务管理器失败!错误号:%d\n按任意键退出......\n", GetLastError());
getch();
return FALSE;
}
hSvc = ::OpenService(hSCM, L"wuauserv", SERVICE_START | SERVICE_QUERY_STATUS | SERVICE_STOP);
if (!hSvc)
{
printf("打开服务失败!错误号:%d\n按任意键退出......\n",GetLastError());
getch();
::CloseServiceHandle(hSCM);
return FALSE;
}
bRet = QueryServiceStatus(hSvc, &status);
if (!bRet)
{
printf("查询服务状态失败!错误号:%d\n按任意键退出......\n", GetLastError());
getch();
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSCM);
return FALSE;
}
if (status.dwCurrentState == SERVICE_STOPPED)
{
SetConsoleTextAttribute(hConsole, 0x0B);//天蓝色
printf("服务尚未启动无需禁用!\n");
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSCM);
return TRUE;
}
bRet = ControlService(hSvc, SERVICE_CONTROL_STOP, &status);
if (!bRet)
{
printf("停止服务失败!错误号:%d\n按任意键退出......\n", GetLastError());
getch();
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSCM);
return FALSE;
}
while (::QueryServiceStatus(hSvc, &status) == TRUE)
{
::Sleep(status.dwWaitHint);
if (status.dwCurrentState == SERVICE_STOPPED)
{
SetConsoleTextAttribute(hConsole, 0x0B);//天蓝色
printf("服务停止成功!\n");
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSCM);
return TRUE;
}
}
}
BOOL Disable_Windows_UpdateData(HANDLE hConsole)
{
HKEY hKey;
DWORD BootType=4;
LONG lRet;
lRet = RegOpenKey(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services\\wuauserv\\", &hKey);
if (ERROR_SUCCESS == lRet)
{
RegSetValueExA(hKey, "Start",0,REG_DWORD, (LPBYTE)&BootType, sizeof(DWORD));
RegCloseKey(hKey);
SetConsoleTextAttribute(hConsole, 0x0B);//天蓝色
printf("服务禁用成功!\n");
return TRUE;
}
else
{
printf("服务禁用失败!错误号:%d\n按任意键退出......\n", GetLastError());
getch();
return FALSE;
}
}
咸鱼你好,咸鱼再见。虎纹咸鱼。 不错,不过我觉得在BAT/VBS/REG不能解决的时候,才需要编程。
顺带贴上REG+BAT的原版:http://www.vbasm.com/blog-4158-58.html 赞一个;P;P 赞一个++
页:
[1]