- UID
- 587
- 精华
- 积分
- 78
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
昨天在群里看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[])
- {
- HANDLE hConsole;
- 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;
- }
- }
复制代码
DisableWin10UpdateData.rar
(4.11 KB, 下载次数: 10)
|
|