Agentic Research

This article is not yet available in English. You are reading the Traditional Chinese original. The English edition will appear here once it is translated.

Browse articles that do have an English edition

Windows 上安裝失敗:PATH、執行原則、SmartScreen 三件事

2026/09/3019 min readBryan Chan閱讀中文原文
TopicsWindows安裝教學疑難排解入門

在 Windows 上照著安裝教學做,然後卡住 —— 這件事的原因比你想像的集中。絕大多數情況落在同一組:

  1. 裝好了,但指令找不到 —— 這是 PATH 與路徑 的問題,不是安裝的問題
  2. 腳本被 PowerShell 擋住 —— 執行原則(execution policy)
  3. 安裝檔被 SmartScreen 或防毒軟體擋住 —— 通常跟「有沒有毒」無關

這篇把三件事分開講,每一件都給你一個可以確認它是不是這個原因的動作,而不是「試試看這些方法」。

不需要你會寫程式。你需要的只是會打開 PowerShell:按 Windows 鍵,輸入 PowerShell,Enter。

先分清兩件事:「裝好了」跟「打得開指令」

Windows 上,「安裝成功」跟「你能在視窗裡打出它的名字」是兩件獨立的事。

第二件事失敗時,畫面給你的訊息用的是第一件事的口氣 —— 它說「不認得這個指令」。於是九成的人得到的結論是「我沒裝好」,然後開始重裝。

重裝不會改變第二件事。 程式本來就在硬碟上,重裝只是再放一次,而電腦找不到它的原因(那份地址清單裡沒有它的資料夾)一次都沒有被動到。

所以在做任何事之前,先跑下面兩個步驟,把「到底裝沒裝」和「電腦找不找得到」分開確認。

步驟

步驟一:確認它到底裝進去沒有

Windows 的「安裝的應用程式」清單,底層是一個登錄機碼。Microsoft 的文件給的查法是直接讀它:

$UninstallPath = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
Get-ChildItem -Path $UninstallPath |
    ForEach-Object -Process { $_.GetValue('DisplayName') } |
    Sort-Object

預期輸出:一長串按字母排序的程式名稱,例如 7-Zip 22.01 (x64)、Visual Studio Code。用眼睛掃,或在視窗裡按 Ctrl + F 找那個工具的名字。

這條清單的兩個限制,Microsoft 自己在文件裡寫明:

  • 「沒有任何保證能找出系統上的每一個應用程式。」
  • 「通常只是把檔案複製到電腦上某個資料夾的應用程式,沒辦法用這裡討論的方式管理。」

也就是說,清單上沒有,不等於沒裝。很多命令列工具(尤其是用一行指令裝的)就屬於「只是把檔案複製到某個資料夾」那一類。所以還要跑步驟二。

同一份文件也提醒不要用 Win32_Product 這個 WMI 類別去查:它沒有針對查詢最佳化,而且查詢過程會觸發已安裝套件的完整性檢查與修復,很慢,還可能在事件記錄裡留下錯誤。

步驟二:確認電腦找不找得到那個指令

Get-Command 程式名

或用 Windows 內建的 where(Microsoft 的說明是「顯示符合指定搜尋模式之檔案的位置」):

where.exe 程式名

程式名 換成你要找的東西,不要加 .exe,例如 Get-Command python。

有印出一個路徑(形如 C:\Users\你的帳號\AppData\Local\Programs\某工具\某工具.exe):程式在,而且 PATH 已經收錄它。這時候如果還報錯,問題不是 PATH,也不是沒裝 —— 往步驟四、五看。

完全沒有輸出、或報「找不到」:分成兩種可能,用一個動作分辨。拿步驟一或檔案總管看到的可能位置,直接指定目錄遞迴搜尋:

where.exe /r "$Env:LOCALAPPDATA\Programs" 程式名.exe
  • 這次找到了 → 程式裝好了,只是它的資料夾不在 PATH 上。去步驟三。
  • 這次還是找不到 → 換 $Env:ProgramFiles 再跑一次;兩處都沒有,才是真的沒裝成功。

順帶一提,where 有個 /q 參數,只回結束代碼(0 成功、1 失敗)不印清單,適合放進腳本。結束代碼是什麼,見 Exit Code(結束代碼)。

步驟三:搞懂 PATH,然後修它

Microsoft 對 PATH 的定義是:$Env:PATH 這個環境變數包含一份資料夾位置的清單,作業系統會在這些位置搜尋可執行檔。在 Windows 上,清單用分號 ; 分隔(macOS 與 Linux 用冒號 :)。

另有 PATHEXT,是 Windows 認定為可執行檔的副檔名清單。你打 python 而它去找 python.exe,靠的就是這個。

你現在就可以看自己的清單:

$Env:PATH -split ';'

關鍵的一件事:環境變數有三個範圍 —— 機器(系統)、使用者、處理程序。Microsoft 的文件明說:在 PowerShell 裡改環境變數,只會影響目前這個工作階段。

這直接解釋了新手最常撞的現象:你照教學改了 PATH,回到那個已經開著的視窗再試一次,還是找不到。因為那個視窗啟動時就把舊清單複製進去了。

修法:開一個全新的 PowerShell 視窗。 這是最便宜的一步,也是最多人在它上面浪費最多時間的一步。

只想在當前視窗暫時加一個資料夾(官方文件給的寫法):

$Env:PATH += ';C:\Tools'

注意開頭那個分號,它是「接在後面」的意思。

要永久生效,建議走圖形介面。Microsoft 文件列的路徑是:開啟系統控制台 → 選「系統」→ 選「進階系統設定」→ 切到「進階」索引標籤 → 按「環境變數...」→ 修改。Windows 11 的「設定」App 也有入口,確切的措辭與位置依 Windows 版本而異,找「環境變數」這四個字就對了。

改的時候守兩條:

  • 改「使用者變數」裡的那一份,不要動「系統變數」。 使用者層不需要管理員權限,也不會影響這台電腦上的其他人。
  • 只「編輯」那一行、在結尾加分號接上新資料夾。絕對不要整行貼上一份新的。 PATH 被蓋掉之後,一大票系統指令會一起失蹤,屆時連修它的工具都打不開。

步驟四:PowerShell 擋住腳本(執行原則)

症狀:你貼上一行安裝指令,它不跑,畫面說這個檔案「無法載入」、未經數位簽章,結尾有 UnauthorizedAccess 字樣。

這是什麼:執行原則是 PowerShell 的一項安全功能,控制它在什麼條件下載入設定檔與執行腳本。Microsoft 也明說它不是安全邊界,是縱深防禦的一層 —— 它的目的是防止你無意間違反自己定的規則。

先查現在是什麼:

Get-ExecutionPolicy
Get-ExecutionPolicy -List

預期輸出:第一條印一個詞(例如 Restricted、RemoteSigned);第二條印一張表,列出五個範圍各自的設定。

如果五個範圍全是 Undefined,Microsoft 的說明是:Windows 用戶端上的有效原則就是 Restricted —— 允許單一命令,但不允許任何腳本。你的一行式安裝指令正是腳本。

改它(不需要管理員):

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

這裡有個新手一定踩的坑:Set-ExecutionPolicy 的預設範圍是 LocalMachine,那會影響這台電腦上的所有人,而且 Microsoft 明說要用「以系統管理員身分執行」開 PowerShell 才改得動。所以網路上抄來的、沒寫 -Scope 的那一行,常常直接以存取被拒結束。加上 -Scope CurrentUser 就只改你自己,不需要提權。

RemoteSigned 的意思(官方定義):從網路下載的腳本與設定檔,需要受信任發行者的數位簽章;你在本機自己寫的、不是下載來的,不需要。

只想在這一個視窗放行,不留設定:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Process 範圍只影響目前這個工作階段,存進 $Env:PSExecutionPolicyPreference,視窗關掉就消失。

或者不改原則,只放行那一個檔案:

Unblock-File -Path .\install.ps1

Microsoft 的文件說明它內部做的事:移除 Zone.Identifier 這個替代資料流(alternate data stream),該資料流的值 3 代表「這個檔案是從網路下載的」。瀏覽器與郵件程式下載檔案時會加上這個標記。文件也特別列出不會加標記的幾種下載方式:curl.exe、Invoke-RestMethod、Invoke-WebRequest。

想知道某個資料夾裡哪些檔案被標記了:

Get-Item * -Stream "Zone.Identifier" -ErrorAction SilentlyContinue

Microsoft 對 Unblock-File 的提醒是原文寫在文件裡的:用它之前,先檢視檔案內容與來源,確認它安全。 這條提醒值得照做 —— 放行一個檔案的動作,比放行整個原則小得多,但也代表你對這一個檔案做了判斷。

改不動的情況:如果這台電腦屬於公司,群組原則(Group Policy)會蓋過你在本機設的任何原則。這時 Set-ExecutionPolicy 可能成功寫入、有效原則卻不變,畫面上會出現一段說明它被群組原則覆寫的訊息。找 IT,不要繼續試。

步驟五:SmartScreen 或防毒軟體擋住安裝檔

症狀:雙擊安裝檔,跳出一個全螢幕或大張的藍色/黃色警告,說 Windows 已保護你的電腦、這是個「未辨識的應用程式」,畫面上找不到明顯的「執行」按鈕。

這是什麼:Microsoft Defender SmartScreen 防的是釣魚與惡意網站、應用程式,以及潛在惡意檔案的下載。它判斷一個下載的應用程式是否可疑的方式,官方文件列了兩條:

  • 比對下載的檔案與一份「已知惡意軟體網站與已知不安全程式」的清單,有符合就警告。
  • 比對下載的檔案與一份「眾所周知、經常被下載」的檔案清單。檔案不在那份清單上,SmartScreen 就顯示警告,提醒你謹慎。

第二條是整篇最重要的一句。文件另一處把它講得更直接:如果某個 URL、檔案、應用程式或憑證已經建立信譽,使用者就不會看到任何警告;如果沒有信譽,該項目會被標記為較高風險並顯示警告。

所以:一個剛推出、下載人數還不多的工具,即使完全正常,也會被擋。 這個警告在講的是「我不認得它」,不是「它有毒」。

該怎麼辦,按這個順序:

  1. 先確認下載來源。 回到該工具的官方網站重新下載一次,而不是用搜尋結果第一頁的廣告、論壇轉貼的鏡像站、或某個「加速下載」的第三方連結。這一步不能省 —— SmartScreen 的警告確實偶爾是真的。

  2. 看它有沒有簽章、簽章是誰:

Get-AuthenticodeSignature -FilePath .\安裝檔.exe

Microsoft 的說明:這個 cmdlet 取得檔案的 Authenticode 簽章資訊;如果檔案未簽章,資訊會回傳但欄位是空白的。輸出裡看 Status 是不是 Valid、簽章者是不是你預期的那家公司。空白或不是 Valid,就把它當成真的警告,不要硬跑。

  1. 不要為了省事把 SmartScreen 或防毒軟體整個關掉。 你關掉的不是這一次警告,是之後每一次。

  2. 確定是誤報:可以把檔案送給 Microsoft 審。官方提交入口是 microsoft.com/wdsi/filesubmission,提交時要在產品選單裡選 Microsoft Defender SmartScreen。

  3. 安裝精靈跑到一半就消失、什麼都沒發生:這種無聲失敗常常是防毒軟體已經把檔案移進隔離區了。打開你的防毒軟體,找名稱類似「隔離區」「保護歷程記錄」「偵測記錄」的區塊(各家產品的措辭與位置都不同,本文不猜你的介面長什麼樣),確認它是不是把安裝檔移走了。如果是,從那裡還原並加入允許清單 —— 重跑一次安裝檔通常沒用,因為它會再被移走一次。

程式把檔案放在哪裡

Windows 用幾個環境變數當常用位置的捷徑。你可以直接在 PowerShell 裡把它們展開來看:

$Env:ProgramFiles
$Env:LOCALAPPDATA

最可靠的做法不是背這些位置,而是讓 Windows 告訴你。 步驟二的 where.exe 程式名 印出的就是執行檔的完整路徑,從那個路徑你立刻看得出來它裝在哪一層:

  • 路徑在 C:\Program Files\... 底下 → 全機安裝,裝的時候要過管理員同意
  • 路徑在 C:\Users\你的帳號\AppData\Local\... 底下 → 只裝給你這個使用者,不需要管理員

$Env:LOCALAPPDATA 展開後就是後者那個資料夾 —— 自己跑一次就能對上。

很多新的 AI 工具走第二條路,這是刻意的:只裝給當前使用者的程式不需要提權,也比較不會被群組原則擋。代價是它比較不會出現在「安裝的應用程式」清單裡,於是「我明明裝了怎麼找不到」就發生了。

還有一類程式根本不走安裝流程,只是把檔案複製到某個資料夾。Microsoft 的文件明說這類程式沒辦法用登錄機碼那套方式找到。這時候只有 where.exe /r 這種直接掃硬碟的方式找得到。

五個症狀,五個確認動作

你看到的通常是先做這一個動作
說不認得你輸入的那個指令名字沒裝,或裝了但不在 PATH 上Get-Command 程式名
檔案無法載入、未經數位簽章、UnauthorizedAccessPowerShell 執行原則Get-ExecutionPolicy -List
藍色警告、未辨識的應用程式、找不到執行按鈕SmartScreen 信譽不足Get-AuthenticodeSignature -FilePath .\安裝檔.exe
安裝精靈中途消失,之後完全找不到程式防毒軟體已把檔案移進隔離區開防毒軟體找隔離區/歷程記錄
改完 PATH、重跑一次還是找不到你在舊視窗裡試,或你在另一個 shell 裡開一個全新的 PowerShell 視窗

第一行的措辭要特別說明:CMD 與 PowerShell 的講法不一樣,不同 Windows 版本的講法也不一樣,但兩者都會重複你輸入的那個名字、並說自己不認得它。本文不逐字抄任何一個版本的原文 —— 你要認的是「它把我的指令名字回給我,說不認得」這個形狀。

一個最容易搞錯的地方:CMD 跟 PowerShell 不是同一個視窗

Windows 上有好幾種「黑底可以打字的視窗」,最常見的兩種是 CMD(命令提示字元)與 PowerShell。它們的語法不同:PowerShell 的指令是「動詞-名詞」形式(Get-Command),變數寫成 $Env:PATH;CMD 用 where、變數寫成 %PATH%。

分辨方式:PowerShell 的提示字元以 PS 開頭,後面通常跟著目前所在資料夾的完整路徑。

網路上很多 AI 工具的安裝指令是寫給 macOS/Linux 的 bash,也有很多是寫給 PowerShell 的。把 bash 指令貼進 PowerShell、或把 PowerShell 指令貼進 CMD,都會失敗,而且失敗訊息看起來很像「這工具壞了」。 本篇所有指令都是 PowerShell 的,請在 PowerShell 視窗裡跑。

判別與對照寫法在 Terminal、Shell、CLI:三個詞的差別 裡有一份。

下一步