2023年11月26日发(作者:)
⽤批处理⽂件阻⽌win10强制更新
1. win10更新下载的位置
2. win10更新进程
3. 隐藏窗⼝运⾏和提升执⾏权限
4. 实现反复运⾏和开机⾃启
win10这个商业巨头微软的最新之作,以流氓⾏径著称,尤其是它的⾃动更新最受诟病。⽤户⽆权选择是否下载和安装更新。你选择不更
新,他就在后台下载,下次开机⾃动安装。何况,这些更新有的没必要,有的装上反⽽起副作⽤。我之前就被装上的更新弄坏⽹卡驱动,重
装⼀次系统;去年3⽉⼤范围爆发的更新bug,导致众多⽤户USB驱动坏掉,⼜重装⼀次系统。再后来,我知道了更新的危害,就每天⼿动
删除那些更新安装包,结果有⼀次它后台下载吃掉我3GB流量。看来,强⾏阻⽌win10⾃动更新已成必要。
以“服务主机”开头的进程,就是服务进
程。这不是废话吗,哈哈。我们并不需要知道具体是哪⼀个之下的。我们刚才已经知道关键进程了,所以想办法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("ation").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:WindowsSoftwareDistributiondownload
timeout /nobreak /t 10
goto loop
冒号开头的:loop表⽰标号,下⾯的goto语句就是返回标号,这就实现了反复执⾏。
下⾯来看开机⾃启
需要知道win10启动项所在位置。如果作为⽤户启动项,那就是
C:UsersUsernameAppdataRoamingMicrosoftWindowsStart MenuProgramsStartUp
username表⽰你的⽤户名。这个⽬录必须在窗⼝下从C盘起⼀级⼀级点下去,不能直接复制粘贴到地址栏,否则会权限不够拒绝访问。
我们来整合⼀下完整的bat⽂件:
cd /d %~dp0
%1 start "" mshta vbscript:createobject("ation").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:WindowsSoftwareDistributiondownload
timeout /nobreak /t 10
goto loop
把它写在记事本⾥,然后保存,后缀名改为bat。双击运⾏⼀下,看看是不是没有⼩⿊窗⼝了?打开任务管理器,看到有Windows命令管理
程序,还有⼀个超时什么的,这就是成功了。
最后呢?开机⾃启,那我们就把这个bat放在刚才打开的那个⽬录⾥。⼤功告成啦!重启⼀下电脑,看看它有没有开机⾃启。注意⼀定要检
查国产安全软件中开机启动项的设置,把刚才制作的脚本放⾏。不然,开机不⾃启那叫什么东西啊。
5、总结
我们⼀共⽤了taskkill,timeout,del,goto,mshta五种命令,并学到了开机⾃启等⽅法。其实DOS命令很强⼤,它可以帮我们做⾃动化
处理,尤其是⽂件管理⽅⾯的⼯作,⽤户可以从繁琐、重复性的⼯作中解放双⼿,去做有意义的事情。
同时,我们也看到微软作为垄断企业的巨⼤权⼒,它可以随意控制⽤户的计算机。所以,发展国产操作系统也是势在必⾏。如果中国有⾜够
多的优秀Linux开发者,打破微软的垄断地位也就不是不可⾏了。


发布评论