新電腦、新系統,滿螢幕圖示讓人眼花撩亂。其實每個程式啟動都遵循固定流程,搞懂這背後機制,不只能快速找到啟動入口,還能理解捷徑、關聯、命令列的本質差異。
五大尋找並啟動程式的入口
- 桌面捷徑:安裝程式常在桌面建立帶小箭頭的 `.lnk` 檔,雙擊即觸發 Shell 執行目標路徑。
- 開始功能表 → 所有程式:系統掃描
%AllUsersProfile%\Start Menu\Programs 與 %AppData%\Start Menu\Programs 下的捷徑,點選即啟動。
- 檔案關聯雙擊:在資料夾或「我的文件」雙擊資料檔(如 `.docx`),Shell 依登錄表
HKEY_CLASSES_ROOT\.docx 關聯到 Word 並傳入檔案路徑參數啟動。
- 執行對話框 / 命令列:Win+R 輸入可執行檔名稱(含路徑或在 PATH 內),或 CMD/PowerShell 直接下指令,建立進程最直接。
- 搜尋/ Cortana:輸入關鍵字,系統索引服務回傳捷徑或執行檔,點選啟動。
程式啟動的內部流程(簡化版)
- 使用者動作 → Shell (`explorer.exe`) 接收訊息。
- Shell 解析目標:捷徑解析 `.lnk` 取得 `TargetPath` + `Arguments`;關聯查詢註冊表取得 `command` 模板。
- 呼叫 `CreateProcess` API:建立新進程物件、配置虛擬記憶體空間、載入映像 (`ntdll.dll`、`kernel32.dll`)、建立主執行緒。
- 進程進入點 (`main`/`WinMain`) 執行:CRT 初始化 → 載入動態連結庫 → 執行應用程式初始化碼 → 進入訊息迴圈/事件循環。
- 視窗顯示、等待使用者互動。
小知識:捷徑 vs 關聯 vs 命令列
| 方式 | 參數傳遞 | 工作目錄 | 適用場景 |
| 捷徑 | 固定在 `.lnk` 內 | 可指定 | 固定參數啟動 |
| 檔案關聯 | 自動帶入雙擊檔案路徑 | 檔案所在目錄 | 文件導向開啟 |
| 命令列 | 完全自訂 | 當前目錄 | 腳本、批次、除錯 |
理解啟動機制,下次找不到程式、參數傳不進去、想自訂啟動參數時,就知道該去查捷徑屬性、註冊表關聯、還是寫批次檔了。