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开发者,打破微软的垄断地位也就不是不可⾏了。