【技巧分享】禁用Win10重啟後自動打開上次未關閉的應用

 2018-03-23 08:00:00.0

在去年的10月10日,微軟正式為Windows 10作業系統推送了秋季創意者更新1709,Win10 1709增加了包括人脈、時間軸視圖、Story Remix在內的諸多新特性,與此同時也增加了一個新功能,系統啟動後會自動打開上次未關閉的程序,比如上次關閉時沒有關閉的網頁或者Word文檔等,下次開機後會自動幫你打開。

...

這個新功能一看就是參考了Mac上使用的OS X系統的一項特性,雖然比較智能化,不過開機自動打開上次未關閉的程序文檔或者網頁有時也會造成隱私泄露等問題,所以OS X在關機時會彈出一個選項讓我們自行決定再次登錄時是否打開未關閉的程序口。

...

不過到了Win10 1709上,這項功能似乎是被強制啟用的,沒有任何讓我們自己選擇的空間,只要你的Win10系統開啟了快速啟動功能,那麼開機後一定會自動打開上次未關閉的程序。對於這樣一項我們並不想啟用的功能難道就真的束手無策了嗎?

實現原理:通過作業系統的RunOnce調用

經過了一段時間的研究發現,Win101709新增的這項開機自動打開上次未關閉的程序功能,其實實現原理很簡單。系統在得到關機指令後,會將正在運行的應用一個個結束掉然後關機,在結束掉應用所在進程的時候,系統會自動將自動關閉的應用程式所在路徑添加到註冊表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功能被禁用掉了,所以在第二步重啟後安裝程序不會自動打開並安裝新版驅動,需要我們手動再打開一遍安裝程序方可。