【技巧分享】禁用Win10重启后自动打开上次未关闭的应用

【技巧分享】禁用Win10重启后自动打开上次未关闭的应用
2018年03月23日 14:35 天极网

在去年的10月10日,微软正式为Windows 10操作系统推送了秋季创意者更新1709,Win10 1709增加了包括人脉、时间轴视图、Story Remix在内的诸多新特性,与此同时也增加了一个新功能,系统启动后会自动打开上次未关闭的程序,比如上次关闭时没有关闭的网页或者Word文档等,下次开机后会自动帮你打开。

这个新功能一看就是参考了Mac上使用的OS X系统的一项特性,虽然比较智能化,不过开机自动打开上次未关闭的程序文档或者网页有时也会造成隐私泄露等问题,所以OS X在关机时会弹出一个选项让我们自行决定再次登录时是否打开未关闭的程序口。

不过到了Win10 1709上,这项功能似乎是被强制启用的,没有任何让我们自己选择的空间,只要你的Win10系统开启了快速启动功能,那么开机后一定会自动打开上次未关闭的程序。对于这样一项我们并不想启用的功能难道就真的束手无策了吗?

实现原理:通过操作系统的RunOnce调用

经过了一段时间的研究发现,Win10 1709新增的这项开机自动打开上次未关闭的程序功能,其实实现原理很简单。系统在得到关机指令后,会将正在运行的应用一个个结束掉然后关机,在结束掉应用所在进程的时候,系统会自动将自动关闭的应用程序所在路径添加到注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce目录下。

RunOnce是Windows系统自带的一个功能,在系统启动后被Windows资源管理器调用,可以将对应的注册表项下的键值执行一次,执行完毕后其对应的注册表字符串值也会被自动删除。RunOnce注册表项一般在软件安装时用到的比较多,举例来说当我们更新Realtek声卡驱动时,驱动的安装程序一般会告诉我们先要卸载旧版驱动,然后手动重启,重启后安装程序会自动启动来继续新驱动的安装。这里其实就是驱动的安装程序调用了RunOnce功能,在卸载掉了旧版驱动程序后向注册表的RunOnce项中添加了安装文件所在路径,然后重启后会自动打开该文件来执行后续操作,Win10的开机自动打开上次未关闭的程序也是通过RunOnce来实现的。

不过有人可能会问,为什么我关机的时候很多应用都没关闭,可是下次开机的时候只有部分应用被自动打开了,有不少应用没有自动打开呢?这里和RunOnce的运行权限有一定的关系,默认情况下RunOnce只能打开非管理员权限的应用,如果某个程序执行文件上面有小盾牌标识,也就是需要使用管理员权限运行时,RunOnce是不能自动打开的。

解决方法:设置注销脚本删除RunOnce注册表项

在了解了Windows 10开机自动打开未关闭程序的实现原理后,我们就可以很轻松的来解决这个问题,每次关机的时候把注册表的RunOnce子项删除掉即可,这里我们可以通过设置注销脚本来操作。

Win10专业版用户:

同时按住Windows键和R键打开运行,输入gpedit.msc,然后按回车打开组策略编辑器

在组策略编辑器左侧列表的用户配置下展开Windows设置,找到脚本(登陆/注销)设置项

在脚本设置项右侧的窗口中找到注销,双击打开

在打开的注销属性窗口中点击添加按钮来添加注销脚本

脚本名:C:\Windows\System32\reg.exe

脚本参数:Delete HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce /va /f

输入完成后点击确定,注销脚本添加成功,这样系统在关机前进行注销操作时都会自动执行Delete HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce /va /f这个命令,注册表的RunOnce项会自动删除,再也不会出现开机后自动打开上次未关闭应用程序的问题了

Win10家庭版用户:

家庭版和专业版在具体设置上没有差别,只不过默认情况下Win10家庭版没有内置组策略编辑器,需要我们使用批处理命令来开启,直接将下方代码复制到空白文本文档里,保存文件名为“家庭版启用组策略”,然后将文件扩展名更改成.cmd或者.bat文件即可。

@echo off

pushd "%~dp0"

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt

for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i"

pause

执行该批处理文件时请右键选择“以管理员的身份运行”

之后系统会自动弹出命令提示符窗口执行启用组策略的命令,执行完毕后按任意键关闭窗口

然后我们就可以在家庭版系统上使用组策略啦,剩下的步骤和专业版相同,这里就不多啰嗦了

副作用:部分安装程序重启后需要手动运行

我们前面通过禁用RunOnce的方法来达到禁止开机启动上次未关闭程序的效果,这样相当于将RunOnce功能给禁用掉了,一些需要依赖RunOnce的软件安装程序在重启后也会出现无法自动打开的情况,需要我们手动运行。

还是以更新Realtek声卡驱动为例,当我们运行Realtek驱动安装程序后,会出现安装选项说明,告知我们安装程序会分两个步骤进行,首先安装程序会卸载掉目前正在使用的旧版驱动,然后重启后自动安装新版驱动

因为RunOnce功能被禁用掉了,所以在第二步重启后安装程序不会自动打开并安装新版驱动,需要我们手动再打开一遍安装程序方可。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部