找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2983|回复: 4

真正意义上的编程实现关闭Windows自动更新服务

[复制链接]
发表于 2015-7-20 02:28:51 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
昨天在群里看Ta分享了一个关闭Windows10的自动更新服务的方法,不过使用的是Reg文件加批处理,
虽然很简单很实用。但是作为我等小菜鸟,还是崇尚装逼,把该方法用高级语言写了一遍。
  1. #include "stdafx.h"
  2. #include <Windows.h>
  3. #include <winsvc.h>
  4. #include <stdio.h>
  5. #include <conio.h>
  6. BOOL Stop_Windows_UpdateData(HANDLE);
  7. BOOL Disable_Windows_UpdateData(HANDLE);
  8. int _tmain(int argc, _TCHAR* argv[])
  9. {
  10.         HANDLE  hConsole;
  11.         hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  12.         SetConsoleTextAttribute(hConsole,0x0D);
  13.         SetConsoleTitle(L"欢迎使用 Windows 10自动更新服务关闭工具 BY:伤城 请在管理员权限下运行!");
  14.         printf("欢迎使用 Windows 10自动更新服务关闭工具 BY:伤城 请在管理员权限下运行!\n按任意键开始......\n");
  15.         getch();
  16.         if (Stop_Windows_UpdateData(hConsole) && Disable_Windows_UpdateData(hConsole))
  17.         {
  18.                 SetConsoleTextAttribute(hConsole,FOREGROUND_GREEN);
  19.                 SetConsoleTitle(L"Windows 10自动更新服务已经成功关闭,感谢你的使用!");
  20.                 printf("\n\nWindows 10自动更新服务已经成功关闭,感谢你的使用!\n按任意键退出......\n");
  21.                 getch();
  22.                 return 0;
  23.         }
  24.         return 0;
  25. }

  26. BOOL Stop_Windows_UpdateData(HANDLE hConsole)
  27. {
  28.         SC_HANDLE hSCM;
  29.         SC_HANDLE hSvc;
  30.         BOOL bRet;
  31.         SERVICE_STATUS status;
  32.         hSCM = ::OpenSCManager(NULL, NULL,GENERIC_EXECUTE);
  33.         if (!hSCM)
  34.         {
  35.                 printf("打开服务管理器失败!错误号:%d\n按任意键退出......\n", GetLastError());
  36.                 getch();
  37.                 return FALSE;
  38.         }
  39.         hSvc = ::OpenService(hSCM, L"wuauserv", SERVICE_START | SERVICE_QUERY_STATUS | SERVICE_STOP);
  40.         if (!hSvc)
  41.         {
  42.                 printf("打开服务失败!错误号:%d\n按任意键退出......\n",GetLastError());
  43.                 getch();
  44.                 ::CloseServiceHandle(hSCM);
  45.                 return FALSE;
  46.         }
  47.         bRet = QueryServiceStatus(hSvc, &status);
  48.         if (!bRet)
  49.         {
  50.                 printf("查询服务状态失败!错误号:%d\n按任意键退出......\n", GetLastError());
  51.                 getch();
  52.                 ::CloseServiceHandle(hSvc);
  53.                 ::CloseServiceHandle(hSCM);
  54.                 return FALSE;
  55.         }
  56.         if (status.dwCurrentState == SERVICE_STOPPED)
  57.         {
  58.                 SetConsoleTextAttribute(hConsole, 0x0B);//天蓝色
  59.                 printf("服务尚未启动无需禁用!\n");
  60.                 ::CloseServiceHandle(hSvc);
  61.                 ::CloseServiceHandle(hSCM);
  62.                 return TRUE;

  63.         }
  64.         bRet = ControlService(hSvc, SERVICE_CONTROL_STOP, &status);
  65.         if (!bRet)
  66.         {
  67.                 printf("停止服务失败!错误号:%d\n按任意键退出......\n", GetLastError());
  68.                 getch();
  69.                 ::CloseServiceHandle(hSvc);
  70.                 ::CloseServiceHandle(hSCM);
  71.                 return FALSE;
  72.         }
  73.         while (::QueryServiceStatus(hSvc, &status) == TRUE)
  74.         {
  75.                 ::Sleep(status.dwWaitHint);
  76.                 if (status.dwCurrentState == SERVICE_STOPPED)
  77.                 {
  78.                         SetConsoleTextAttribute(hConsole, 0x0B);//天蓝色
  79.                         printf("服务停止成功!\n");
  80.                         ::CloseServiceHandle(hSvc);
  81.                         ::CloseServiceHandle(hSCM);
  82.                         return TRUE;
  83.                 }
  84.         }
  85.        
  86. }
  87. BOOL Disable_Windows_UpdateData(HANDLE hConsole)
  88. {
  89.         HKEY hKey;
  90.         DWORD BootType=4;
  91.         LONG lRet;
  92.         lRet = RegOpenKey(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services\\wuauserv\", &hKey);
  93.         if (ERROR_SUCCESS == lRet)
  94.         {
  95.                 RegSetValueExA(hKey, "Start",0,REG_DWORD, (LPBYTE)&BootType, sizeof(DWORD));
  96.                 RegCloseKey(hKey);
  97.                 SetConsoleTextAttribute(hConsole, 0x0B);//天蓝色
  98.                 printf("服务禁用成功!\n");
  99.                 return TRUE;
  100.         }
  101.         else
  102.         {
  103.                 printf("服务禁用失败!错误号:%d\n按任意键退出......\n", GetLastError());
  104.                 getch();
  105.                 return FALSE;
  106.         }
  107. }
复制代码


DisableWin10UpdateData.rar (4.11 KB, 下载次数: 10)



回复

使用道具 举报

发表于 2015-7-20 11:25:50 来自手机 | 显示全部楼层
咸鱼你好,咸鱼再见。虎纹咸鱼。
回复 赞! 1 靠! 0

使用道具 举报

发表于 2015-7-20 08:33:26 | 显示全部楼层
不错,不过我觉得在BAT/VBS/REG不能解决的时候,才需要编程。

顺带贴上REG+BAT的原版:http://www.vbasm.com/blog-4158-58.html
回复 赞! 靠!

使用道具 举报

发表于 2015-7-20 14:04:51 | 显示全部楼层
赞一个
回复

使用道具 举报

发表于 2015-7-20 17:13:25 | 显示全部楼层
赞一个++
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 20:35 , Processed in 0.036141 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表