用批处理文件阻止win10强制更新

用批处理文件阻止win10强制更新win10这个商业巨头微软的最新之作,以流氓行径著称,尤其是它的自动更新最受诟病。用户无权选择是否下载和安装更新。你选择不更新,他就在后台下载,下次开机自动安装。何况,这些更新有的没必要,有的装上反而起副作用。我之前就被装上的更新弄坏网卡驱动,重装一次系统;今年3月大范围爆发的更新bug,导致众多用户USB驱动坏掉,又重装一次系统。再后来,我知道了更新的危害,就每天手动删除那些更新安装包,结果有一…

大家好,又见面了,我是你们的朋友全栈君。

  1. win10更新下载的位置
  2. win10更新进程
  3. 隐藏窗口运行和提升执行权限
  4. 实现反复运行和开机自启

win10这个商业巨头微软的最新之作,以流氓行径著称,尤其是它的自动更新最受诟病。用户无权选择是否下载和安装更新。你选择不更新,他就在后台下载,下次开机自动安装。何况,这些更新有的没必要,有的装上反而起副作用。我之前就被装上的更新弄坏网卡驱动,重装一次系统;去年3月大范围爆发的更新bug,导致众多用户USB驱动坏掉,又重装一次系统。再后来,我知道了更新的危害,就每天手动删除那些更新安装包,结果有一次它后台下载吃掉我3GB流量。看来,强行阻止win10自动更新已成必要。

我一年多来和win10的艰苦卓绝的斗争,现在终于取得了完全的胜利,洗雪了重置两次系统的奇耻大辱(滑稽~)。下面我就把经验分享给大家,其实也没那么残酷,就是多观察,多搜索,写出一个10行左右的小脚本即可。主要功能就是,随时阻止win10更新进程,并删掉已下载的安装包。为了完整地实现上述功能,要认真地看完这篇文,虽然比较长,但这是一劳永逸的事,多好!大家最好动手写一遍,不要直接复制粘贴,这样就对这一系列命令有了解,以后做这样的脚本也得心应手。

1、win10更新下载的位置

根据我的观察以及搜索引擎的帮助,可知,win10下载的更新是一些压缩包,需要系统专门进程来引导安装。我曾经在某个更新被安装后手动卸载,但这已经迟了,其实它根本卸载不了,**关键要在它被安装之前拦截住,删掉安装包。**这些安装包在下面的路径:

C:\WINDOWS\SoftwareDistribution\Download

如果你发现这里有好多文件,就要手动把它删掉。但是,这太麻烦了。据我观察,win10更新程序玩的嗨的时候,两分钟就能运行一次,所以必须有一种自动化的删除方法。
懂DOS命令的童鞋都知道有一个del命令能帮我们删除这些文件。del命令有几个选项,我们要用到的就是/f /s /q三个选项。/f表示强制删除,/s表示递归删除目录下所有文件,/q表示不提示用户选择而直接删除。所以应当这样写:

del /f /s /q C:\WINDOWS\SoftwareDistribution\Download

如果我们在cmd命令行中输入这个命令,会反馈“拒绝访问”。这表明我们的权限不够。在Linux里面可以用sudo,win10怎么办呢?别急,反正方法已经有了,权限的事情很简单,我们稍后会专门讨论。

2、win10更新进程

刚才说了,仅仅靠删除安装包是不行的。如果你用的宽带那无所谓,如果你用手机热点,好家伙,一次下载更新需要2~3GB的流量,如果不是王卡我觉得没人承受得起。所以,还要找到win10更新的关键进程,一旦运行立即结束。我们知道结束进程的命令是taskkill,下面就来讨论这个。
win10更新有两个关键进程。这些进程不是用程序文件名来表示的,而是用服务名来表示的。服务就是后台进程,所以从文件名是找不到的,必须用taskkill命令中的一些特殊选项。
我根据CPU风扇声就能判断win10是否在下载更新(这就是常年斗争磨练出来的,比如我就打开一个office,风扇异响,那肯定是后台高消耗进程)。这时观察网速,如果没有下载任务,网速异动(比如突然飙升到最快),那无疑是更新程序在作怪。这时打开任务管理器,按网速排序,最快的那个就是关键下载程序。
这个进程我已经摸索到了,大家以后直接针对它就行。那就是dosvc服务。
还有一个win10更新主进程,叫做wuauserv服务。

不知道服务进程的小伙伴有点懵,这都是什么玩意?别着急,我们慢慢来说。
打开任务管理器,如下图

在这里插入图片描述以“服务主机”开头的进程,就是服务进程。这不是废话吗,哈哈。我们并不需要知道具体是哪一个之下的。我们刚才已经知道关键进程了,所以想办法kill掉!
taskkill命令有一个/fi选项。它是用来指定筛选器的。筛选器,顾名思义就是选择符合指定条件的进程来杀掉。所以关键在后面的筛选条件。
筛选条件不言自明,就是名称为 dosvc 的服务进程,和名称为wuauserv的服务进程。
筛选条件就是下面的格式(注意必须有引号):

"name operator value"

name叫做筛选器名称。我们要结束服务进程,所以筛选器名称就是services。
opeartor叫做运算符,包括eq–等于,ne–不等于。我们选择eq。
value叫做筛选值,这里要筛选服务,所以指定名称,那就是dosvc和wuauserv。
另外,taskkill还需要加上/f选项,表示强制结束。
所以,结束这两个进程的命令,就写成

taskkill /f /fi "services eq wuauserv"
taskkill /f /fi "services eq dosvc"

运行的时候,又是可恶的拒绝访问。好了,第三步到了,我们要新账老账一起算,解决权限问题。

3、隐藏窗口运行和提升执行权限

我们知道Linux里面有sudo命令,用来以root身份执行命令。但是Windows的cmd里面没有。你要双击运行,改成右键以管理员身份也行。但是我们要开机自启的,怎么右键呢?所以我们要请来一个更神奇的工具–vbs。
cmd中用来调用vbs脚本命令的命令(有点绕口是吧)就是mshta。这个vbs我用的不太熟,所以百度了一下,真有大神会弄。所以我直接粘贴一下,做点简单的解释。

cd /d %~dp0
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",0)(window.close)&exit

第一行是进入某个特殊目录,我也不懂这个目录是什么,但和访问权限检测有关。第二行就是用vbs里面的 shellexecute 函数来提升访问权限的。
函数格式就是:

shellexecute(file, arguments, directory, operation, show)

第一个参数是要执行的文件,第二个是赋予的参数字符串,第三个是文件所在路径,第四个是管理员权限操作符runas,第五个是是否打开窗口。我们执行这种后台程序,最好的模式就是管理员身份运行,并且不弹出黑窗口,所以runas要打开,show要赋值0。
把这两行放到我们批处理文件的头部,就可以做出一个完整的脚本了。不过,还有一点需要注意,为了隐藏窗口,需要我们把运行时的echo回显器关掉,所以这两行后面再加一行

@echo off

这就完了?No。我刚才说了,win10喜欢对着干,你刚结束它又重启,而且是会开机自启的。所以,魔高一尺道高一丈,我们也得自动反复运行和开机自启。

4、实现反复运行和开机自启

反复运行这个很简单,就是用goto命令构造一个死循环。我们把刚才结束进程和删除文件的命令总结一下,把它们放到循环体中。
死循环也得有个度,不能间隔太短,不然你的CPU会炸了的。据我观察,一个更新进程10秒钟重启是不太可能的,所以我们把间隔调成10秒。
这就是timeout命令。有两个选项,/nobreak表示不等待用户按键,只等待计时器。/t用来指定延时。所以写成

timeout /nobreak /t 10

合起来就是:

:loop
taskkill /f /fi "services eq wuauserv"
taskkill /f /fi "services eq dosvc"
del /f /s /q C:\Windows\SoftwareDistribution\download
timeout /nobreak /t 10
goto loop

冒号开头的:loop表示标号,下面的goto语句就是返回标号,这就实现了反复执行。

下面来看开机自启
需要知道win10启动项所在位置。如果作为用户启动项,那就是

C:\Users\Username\Appdata\Roaming\Microsoft\Windows\Start Menu\Programs\StartUp

username表示你的用户名。这个目录必须在窗口下从C盘起一级一级点下去,不能直接复制粘贴到地址栏,否则会权限不够拒绝访问。
我们来整合一下完整的bat文件:

cd /d %~dp0
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",0)(window.close)&exit

@echo off
:loop
taskkill /f /fi "services eq wuauserv"
taskkill /f /fi "services eq dosvc"
del /f /s /q C:\Windows\SoftwareDistribution\download
timeout /nobreak /t 10
goto loop

把它写在记事本里,然后保存,后缀名改为bat。双击运行一下,看看是不是没有小黑窗口了?打开任务管理器,看到有Windows命令管理程序,还有一个超时什么的,这就是成功了。
最后呢?开机自启,那我们就把这个bat放在刚才打开的那个目录里。大功告成啦!重启一下电脑,看看它有没有开机自启。注意一定要检查国产安全软件中开机启动项的设置,把刚才制作的脚本放行。不然,开机不自启那叫什么东西啊。

5、总结

我们一共用了taskkill,timeout,del,goto,mshta五种命令,并学到了开机自启等方法。其实DOS命令很强大,它可以帮我们做自动化处理,尤其是文件管理方面的工作,用户可以从繁琐、重复性的工作中解放双手,去做有意义的事情。
同时,我们也看到微软作为垄断企业的巨大权力,它可以随意控制用户的计算机。所以,发展国产操作系统也是势在必行。如果中国有足够多的优秀Linux开发者,打破微软的垄断地位也就不是不可行了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136050.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • policy服务器未能登录,win7电脑提示group policy client服务未能登录的解决方法[通俗易懂]

    policy服务器未能登录,win7电脑提示group policy client服务未能登录的解决方法[通俗易懂]我们都清楚电脑使用久了总是会出现各种各样的问题,其中比较常见的就是系统提示了,最近有位win7系统用户使用电脑的过程中,系统总是会提示“grouppolicyclient服务未能登录”,用户不知道怎么解决,我们都清楚电脑使用久了总是会出现各种各样的问题,其中比较常见的就是系统提示了,最近有位win7系统用户使用电脑的过程中,系统总是会提示“grouppolicyclient服务未能登录”,…

  • Centos 7 DNS服务器配置

    Centos 7 DNS服务器配置实验三、DNS的管理配置与应用1实验目的(1)了解DNS(域名系统)的工作原理。(2)掌握Linux操作系统中DNS组件安装。(3)掌握Linux操作系统中DNS服务的配置方法。2实验内容(1)在LinuxCentos7.6操作系统中安装DNS组件并配置DNS服务。3实验原理计算机在网络上进行通讯时只能识别如“203.51.0.73”之类的IP地址,而互联网上的网站无穷多,我们很难记住各网站枯燥的IP地址号,这就产生了方便人们记忆的域名管理系统DNS:DomainNam

  • stl库,基本操作代码

    stl库,基本操作代码

  • visual studio新手使用教程「建议收藏」

    visual studio新手使用教程「建议收藏」目录1.下载安装VisualStudio2.新建工程3.新建项目4.添加源文件5.编译一闪而退的问题6.使用scanf函数报错问题7.VS常用调试程序快捷键8.VS的调试窗口9.工具->选项对于刚刚接触编程的新手来说,最先需要熟练掌握的当然是语言之祖——C语言,而C语言编译器首当其冲的必然是visualstudio,小编入门使用VC6.0,…

  • 细数家庭安防五大乱象 何时能步入正轨

    细数家庭安防五大乱象 何时能步入正轨虽然智能家居行业在我国的成长已逾十个年头了,但是目前市场离成型仍然有一段距离。市场上可谓“乱象”丛生,这些绊脚石严重阻碍了行业的良性发展。市场乱象繁生,智能家居从概念炒作到价格高抬,相关预测显示,若真如电商一样打起价格战,智能家居就要认输了。“智能家居”(SmartHome)最早被提出和应用是在上世纪80年代的欧美和日本,2000年才被引入中国。世纪…

  • Http通过header传递参数_http contenttype

    Http通过header传递参数_http contenttype提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、header常用指令header分为三部分:发送一个200正常响应set404header:页面没找到页面被永久删除,可以告诉搜索引擎更新它们的urls访问受限服务器错误重定向到一个新的位置延迟一段时间后重定向覆盖X-Powered-Byvalue内容语言(en=English)最后修改时间(在缓存的时候可以用到)告诉浏览器要获取的内容还没有更新设置内容的长度(缓存的时候可以用到):用来下载文件:禁止

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号