在作業系統啟動時執行特定程式

大家都知道要讓系統啟動時執行特定程式,最簡單的方法就是把那隻程式的link丟到啟動中。

也可以新增這隻程式的執行路徑到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run


上述兩種方法,都必須登入後才會執行,當然我是可以讓它auto-login的,但我想這通常只會用於個人或測試環境。如果想要在系統啟動後就執行,可以透過系統管理工具工作排程器

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v AUTO_TEST_BOOTSTRAP /t REG_SZ /d "%BASE%bootstrap.bat" /f

為了方便我寫了一隻Batch,讓我可以直接將某隻程式註冊為開機執行。

@echo off
set RUN_TASK="%1"
if %RUN_TASK% == "" goto emptyError

set TASK_NAME=%~nx1

schtasks /Create /RU SYSTEM /RL HIGHEST /TN %TASK_NAME% /SC ONSTART /TR %RUN_TASK% 


goto :finish

:emptyError
echo Please enter a valid cmd
goto :finish

:finish
 
pause
主要是透過schtasks去排程。使用/RU SYSTEM讓這隻程式是以SYSTEM身分去執行;使用/RL HIGHEST確保以最高權限執行;使用/SC ONSTART指定開機執行;而/TN/TR分別為Task ID與執行程式路徑。執行後,應該可以在工作排程器中看到。如果重複註冊會詢問你是否要覆蓋。
如果有參數,我建議是寫一個Batch將參數都放在裡面,會比較單純。

另外實做了removeScheduleTask.bat,負責移除註冊的SheduledTask,與scheduleTaskOnStart.bat是一對。
@echo off
set RUN_TASK="%1"
if %RUN_TASK% == "" goto emptyError

set TASK_NAME=%~nx1

schtasks /Delete /F /TN %TASK_NAME%
goto :finish

:emptyError
echo Please enter a valid cmd
goto :finish

:finish
 
pause

友藏內心獨白: 這篇內容並不單純,讓我們繼續看下去。