使用 Windows Sandbox 建立可重複的 VS Code 開發驗證環境
使用 Windows Sandbox 建立可重複的 VS Code 開發驗證環境
簡介
平常在測試新的開發工具、VS Code 版本、JDK 或終端機設定時,最麻煩的地方通常不是安裝本身,而是安裝後會不會改到主機環境。像是 PATH、右鍵選單、登錄檔、使用者設定與工具版本,只要多試幾次,就可能讓原本穩定的開發機變得難以追蹤。
而這篇文章的起因,則是近期各種套件竊取資訊、惡意更新與供應鏈攻擊事件越來越頻繁。當我們只是想快速驗證某個工具、套件或 extension 是否可用時,其實不一定適合直接在主要開發機上執行。即使來源看起來可信,也可能因為相依套件、安裝腳本或更新流程帶來額外風險。
Windows Sandbox 很適合用來處理這類需求。它可以建立一個一次性的 Windows 環境,關閉後所有變更都會被丟棄;只要把啟動設定與安裝腳本整理好,每次都能快速還原出乾淨且一致的 VS Code 開發驗證環境。
這篇文章會以 C:\Sandbox 底下的設定為例,說明如何透過 Windows Sandbox 自動掛載資料夾、套用基本系統設定,並離線安裝 VS Code、PowerShell 7、Windows Terminal、7-Zip 與 Zulu JDK,讓 Sandbox 啟動後就能直接進行開發驗證。完整範例可參考 java-sandbox 專案。
啟用 Windows Sandbox
Windows Sandbox 是 Windows 內建的隔離桌面環境,但不是所有版本都能使用。開始前需要先確認主機使用的是 Windows 10 / 11 Pro、Enterprise 或 Education 版本,並且已啟用 CPU 虛擬化功能。如果是 Windows Home,預設不提供 Windows Sandbox 功能。
確認版本與虛擬化支援後,可以透過「Windows 功能」啟用:
- 開啟開始選單,搜尋並進入「開啟或關閉 Windows 功能」。
- 勾選「Windows Sandbox」。
- 按下「確定」後等待功能安裝完成。
- 依照提示重新啟動電腦。
如果習慣使用命令列,也可以用系統管理員身分開啟 PowerShell,執行以下指令啟用:
1 | Enable-WindowsOptionalFeature -Online -FeatureName Containers-DisposableClientVM -All |
功能啟用並重新開機後,可以在開始選單搜尋 Windows Sandbox 直接啟動預設環境。若能成功開啟一個乾淨的 Windows 桌面,就代表 Sandbox 功能已安裝完成。
不過,直接從開始選單啟動的 Sandbox 只會得到預設環境。若要套用這篇文章後續的自動化設定,接下來會改用 C:\Sandbox\boot.wsb 作為啟動入口,讓 Sandbox 開機後自動掛載資料夾並執行初始化腳本。
目錄結構
這次的 Sandbox 初始化資料都放在主機的 C:\Sandbox 底下,主要分成四個部分:
1 | C:\Sandbox |
其中 boot.wsb 是 Windows Sandbox 的啟動設定檔,負責定義資源、映射資料夾與登入後要執行的命令。boot.bat 則是進入 Sandbox 後的第一個入口,會依序執行登錄檔設定與工具安裝腳本。
Install 資料夾放的是離線安裝檔。這樣做的好處是 Sandbox 不需要每次啟動都重新下載工具,也比較容易控制測試時使用的版本。Logs 則用來保存安裝紀錄,方便確認初始化是否成功,或在安裝失敗時回頭追查原因。
Windows Sandbox 啟動設定
boot.wsb 的第一個重點是資源與裝置設定。這份設定將 Sandbox 記憶體設為 8192 MB,並停用麥克風、攝影機與印表機重新導向;剪貼簿、vGPU 與網路則維持啟用。
1 | <MemoryInMB>8192</MemoryInMB> |
這樣的配置很適合開發驗證情境:保留剪貼簿與網路,方便複製指令、下載資料或登入服務;同時關閉不需要的輸入裝置與印表機重新導向,降低 Sandbox 接觸主機周邊資源的範圍。
接著是資料夾映射設定。這份設定將主機的 C:\Sandbox 映射到 Sandbox 內相同路徑,讓啟動腳本、安裝檔與 log 都能被 Sandbox 存取。
1 | <MappedFolder> |
另外也將主機的 C:\CodeBase 以唯讀方式映射進 Sandbox,方便在隔離環境中開啟與檢查程式碼,但避免 Sandbox 直接修改主機上的原始碼。
1 | <MappedFolder> |
下載資料夾同樣以唯讀方式映射到 Sandbox 使用者的 Downloads 目錄,適合取用主機已下載的檔案,又不讓 Sandbox 寫回主機下載目錄。
1 | <MappedFolder> |
最後,LogonCommand 指定 Sandbox 登入後自動執行 boot.bat。
1 | <LogonCommand> |
也就是說,只要開啟 boot.wsb,後續的系統設定與工具安裝都會自動開始,不需要手動進入 Sandbox 後再一個一個執行命令。
啟動入口:boot.bat
boot.bat 的內容很單純,主要負責組合腳本路徑,然後依序執行 RegistrySettings.cmd 與 Install-All.ps1。
1 | @echo off |
這裡使用 %~dp0 取得 boot.bat 所在目錄,因此即使未來 C:\Sandbox 內容調整,只要相對目錄結構不變,腳本仍能正確找到初始化檔案。
PowerShell 腳本執行時加上 -NoProfile 與 -ExecutionPolicy Bypass,目的是避免受到使用者 profile 或執行原則影響,讓 Sandbox 初始化流程更接近可重複執行的狀態。
套用 Sandbox 內的基本操作設定
RegistrySettings.cmd 負責先把 Sandbox 調整成比較適合開發與驗證的桌面環境。它做了幾件常見但實用的設定:
- 在開始選單中顯示「以其他使用者執行」選項
- 設定主控台與終端機委派
- 關閉開始選單建議項目
- 顯示檔案副檔名
- 顯示隱藏檔案與資料夾
- 將檔案總管
Win + E預設開啟位置設為「本機」 - 將工作列搜尋調整為僅顯示搜尋圖示
- 啟用傳統右鍵選單
例如顯示副檔名與隱藏檔案的設定如下:
1 | reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f |
這些設定不一定和 VS Code 安裝直接相關,但會影響開發驗證時的操作效率。例如在測試 extension、檢查設定檔或確認壓縮檔內容時,能直接看到副檔名與隱藏檔會方便很多。
腳本最後會重新啟動檔案總管,讓相關設定立即生效。
1 | taskkill /f /im explorer.exe >nul 2>&1 |
離線安裝開發工具
真正建立開發環境的工作集中在 Init_Scripts\Install-All.ps1。這支腳本一開始會設定幾個重要路徑:
1 | $Root = Split-Path -Parent $PSScriptRoot |
$Root 會指向 C:\Sandbox,$InstallDir 則指向離線安裝檔所在的 C:\Sandbox\Install。可攜式工具會解壓到 C:\Tools,安裝過程則記錄到 C:\Sandbox\Logs。
腳本也會啟用 transcript,完整保存 PowerShell 執行過程。
1 | Start-Transcript -Path $TranscriptFile -Append | Out-Null |
在安裝前,Require-File 會先確認預期的安裝檔是否存在。如果缺少任一檔案,流程會直接中止,避免後面出現不明確的安裝錯誤。
1 | function Require-File { |
這次安裝流程包含以下工具:
| 工具 | 安裝來源 | 用途 |
|---|---|---|
| 7-Zip | 7z2601-x64.exe |
解壓與檢查壓縮檔 |
| PowerShell 7 | PowerShell-7.6.3-win-x64.msi |
使用新版 PowerShell 驗證腳本與命令列流程 |
| Windows Terminal | Microsoft.WindowsTerminal_1.24.11321.0_x64.zip |
提供較完整的終端機操作體驗 |
| Zulu JDK | zulu25.32.21-ca-fx-jdk25.0.2-win_x64.zip |
驗證 Java / VS Code Java 開發環境 |
| Visual Studio Code | VSCodeUserSetup-x64-1.126.0.exe |
開發與 extension 驗證主體 |
7-Zip 與 PowerShell 7
7-Zip 透過靜默參數 /S 安裝,安裝後會將 C:\Program Files\7-Zip 加入系統 PATH。
1 | $sevenZipInstaller = Require-File '7z2601-x64.exe' |
PowerShell 7 則透過 msiexec.exe 以靜默模式安裝,並加入檔案總管右鍵選單,但不啟用 PowerShell Remoting 與 Microsoft Update。
1 | $powershellInstaller = Require-File 'PowerShell-7.6.3-win-x64.msi' |
Windows Terminal
Windows Terminal 使用 ZIP 套件,不走安裝程式。腳本會先清掉目標資料夾,再解壓到 C:\Tools\WindowsTerminal。
1 | $terminalArchive = Require-File 'Microsoft.WindowsTerminal_1.24.11321.0_x64.zip' |
解壓後,腳本會找到實際的應用程式目錄,加入 PATH,並在桌面建立 Windows Terminal 捷徑。
1 | Add-MachinePath $terminalRoot.FullName |
這讓 Sandbox 啟動完成後,可以直接從桌面開啟 Windows Terminal,不需要手動尋找 WindowsTerminal.exe。
Zulu JDK
Zulu JDK 同樣以 ZIP 方式解壓到 C:\Tools\JDK,接著設定系統層級的 JAVA_HOME,並將 JDK 的 bin 目錄加入 PATH。
1 | $jdkArchive = Require-File 'zulu25.32.21-ca-fx-jdk25.0.2-win_x64.zip' |
這對 VS Code Java 開發驗證很重要。啟動 VS Code 後,可以直接檢查 Java extension 是否能找到 JDK,或透過終端機執行 java -version 確認環境變數是否生效。
Visual Studio Code
VS Code 使用 User Setup 安裝包,透過靜默參數安裝,並加入 PATH、檔案右鍵選單與資料夾右鍵選單。
1 | $vscodeInstaller = Require-File 'VSCodeUserSetup-x64-1.126.0.exe' |
安裝完成後,Register-VSCodeContextMenus 會再針對檔案、資料夾與資料夾空白處建立 Open with VS Code 右鍵選單。
1 | $menuItems = @( |
搭配前面啟用的傳統右鍵選單,這樣在 Sandbox 中測試 Open with VS Code 行為會更直覺,也更接近許多開發者熟悉的 Windows 操作方式。
啟動與驗證流程
使用時只需要在主機上開啟 C:\Sandbox\boot.wsb。Windows Sandbox 登入後會自動執行 C:\Sandbox\boot.bat,接著套用登錄檔設定並開始安裝工具。
從目前的 install-transcript.log 可以看到,整段流程在 Sandbox 內以 WDAGUtilityAccount 身分執行,PowerShell 版本為 5.1,並成功完成所有工具安裝。
1 | [2026-06-26 01:20:42] Starting sandbox application installation |
依照這份紀錄,初始化大約從 01:20:42 到 01:23:25 完成,整體約三分鐘左右。完成後腳本會顯示「初始化成功」提示視窗,代表 Sandbox 已經可以開始進行 VS Code 開發驗證。
建議啟動後可以依序檢查幾個項目:
- 桌面是否出現 Windows Terminal 捷徑
C:\Tools是否包含 Windows Terminal 與 JDK- 檔案總管是否顯示副檔名與隱藏檔
- 右鍵選單是否出現
Open with VS Code - 終端機中是否能執行
pwsh、code、7z與java -version - VS Code 是否能開啟唯讀映射的
C:\CodeBase
如果安裝過程失敗,可以先檢查 C:\Sandbox\Logs\install.log。若需要更完整的 PowerShell 執行細節,再查看 C:\Sandbox\Logs\install-transcript.log。
為什麼適合用來驗證 VS Code 開發環境
這套做法最大的優點是可重複與可丟棄。每次開啟 Sandbox 都會從乾淨環境開始,然後透過同一份腳本安裝指定版本的工具。當你要測試新的 VS Code 版本、Java extension 行為、PATH 設定、右鍵選單或終端機整合時,不需要擔心把主機環境弄亂。
C:\CodeBase 以唯讀方式映射也很適合做驗證。你可以在 Sandbox 中開啟專案、觀察 VS Code 是否正確載入、測試 extension 或執行只讀分析;即使誤操作,也不會直接修改主機上的原始碼。
離線安裝檔則讓環境更穩定。工具版本都固定在 Install 資料夾中,不會因為每次從網路下載到不同版本而造成測試結果不一致。對於需要反覆確認 VS Code 開發體驗、JDK 偵測、命令列工具整合的情境,這會比手動安裝更容易追蹤。
小結
透過 boot.wsb、boot.bat、RegistrySettings.cmd 與 Install-All.ps1,可以把 Windows Sandbox 變成一個自動化的 VS Code 開發驗證環境。主機只需要準備好 C:\Sandbox 目錄與離線安裝檔,啟動 Sandbox 後就會自動完成桌面設定、工具安裝、PATH 設定、JDK 設定與 VS Code 右鍵選單註冊。
這種方式特別適合用來驗證不想直接動到主機的開發環境變更。測完之後關閉 Sandbox,所有 Sandbox 內的變更都會消失;下一次再開啟時,又能從同一份腳本重新產生一致的測試環境。對需要反覆測試 VS Code、Java 工具鏈與 Windows 開發體驗的人來說,是一個乾淨、可控又容易重現的做法。