只有兩行,沒有解釋
cmd
C:\>net use Z: http://dav.example.com/
發生系統錯誤 67。
找不到網路名稱。錯誤 67 在微軟的 Win32 錯誤清單裡是 ERROR_BAD_NET_NAME,說明為「The network name cannot be found.」。檔案總管用十六進位顯示同一個失敗,也就是 錯誤 0x80070043。十進位 67 等於 0x43,0x8007 是 Windows 把 Win32 錯誤包成 HRESULT 時加的前綴。一個失敗,兩種寫法。
命令列更適合排查:一次只改一個變數,結果立刻看得到。
微軟說的原因
WebDAV 重定向程式文件列出六個會讓磁碟機對應回傳系統錯誤 67 的條件。在非 IIS 的伺服器上,前三個幾乎能解釋所有情況。
| 文件記載的原因 | 對你的意義 |
|---|---|
| 伺服器沒安裝或沒執行 IIS | 只對 IIS 目標有意義;先確認一般 GET 有回應 |
| 用戶端沒安裝 WebDAV 重定向程式 | Windows Server 要加「桌面體驗」功能;桌面版內建 |
| 用戶端的 WebClient 服務沒有執行 | 啟動它,並設為自動 |
| 站台沒有啟用 WebDAV | 檢查回應裡有沒有 DAV: 標頭 |
| 用 HTTP 而不是 HTTPS 搭 Basic 驗證 | 調高 BasicAuthLevel,或把端點換成 HTTPS |
| Windows 驗證的 FQDN 站台缺少 Proxy 略過設定 | 在用戶端的略過清單加入該站台 |
步驟一:確認重定向程式還活著
對應出來的 WebDAV 磁碟機由 WebClient 服務處理。微軟在 2023 年 11 月淘汰了它,並在同一份公告裡寫明 Webclient 服務在 Windows 上預設不會啟動。在較新的機器上,這一條是答案的機率最高。
powershell
Get-Service WebClient | Format-List Name, Status, StartType
Set-Service -Name WebClient -StartupType Automatic
Start-Service -Name WebClient命令提示字元版本要求每個 = 後面有空格。微軟的 sc.exe config 參考寫明選項與值之間必須有空格,省掉就會失敗——被到處複製的 start=auto 正是省掉的那種。
cmd
sc.exe config WebClient start= auto
sc.exe start WebClient服務起來後再試一次。如果之前已經失敗過,等一分鐘:ServerNotFoundCacheLifeTimeInSec 預設 60 秒,在這段時間內 WebClient 會直接回傳快取的失敗,根本不會連伺服器。
步驟二:把指令寫對
net use 對 WebDAV 接受兩種形式。純 URL 形式出現在微軟的操作說明:NET USE * http://www.example.com,* 代表用下一個空閒磁碟機代號。UNC 形式由 DavGetHTTPFromUNCPath 函式的文件定義為 \\server[@SSL][@port][\path],@SSL 代表 HTTPS,@port 在連接埠不是 80 或 443 時必寫。DavWWWRoot 指向 WebDAV 伺服器的根。
cmd
rem 預設連接埠的 HTTPS
net use Z: \\dav.example.com@SSL\DavWWWRoot\files /user:alice *
rem 明確寫連接埠的 HTTPS
net use Z: \\dav.example.com@SSL@443\DavWWWRoot\files /user:alice *
rem 自訂連接埠的明文 HTTP
net use Y: http://dav.example.com:8080/remote.php/dav/files/alice /user:alice *結尾那個 * 不是裝飾。文件裡的 net use 語法接受密碼或 *,寫 * 時 Windows 會提示輸入,密碼不會留在指令歷史裡。想讓對應在重開機後仍存在,加上 /persistent:yes。
光是寫法就能造成錯誤 67 的有三種:漏掉協定(於是走了 SMB)、漏掉非預設連接埠、以及伺服器在 /dav 或 /remote.php/dav/files/alice 這類子路徑下發布 WebDAV,你卻對應了站台根。
步驟三:允許 HTTP 上的 Basic 驗證
如果端點是 http:// 且使用 Basic 驗證,Windows 會在跳出密碼視窗之前就拒絕。開關是 WebClient 參數機碼下的 DWORD BasicAuthLevel,文件給了三個值:0 停用 Basic 驗證,1 只在 SSL 站台,2 在 SSL 與非 SSL 都允許。預設是 1。
cmd
reg query "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v BasicAuthLevel
reg add "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v BasicAuthLevel /t REG_DWORD /d 2 /f
net stop WebClient
net start WebClient重啟服務是必要的,微軟文件對這個機碼下的每個值都這麼寫。同時要清楚代價:等級 2 會讓憑證以明文傳輸。對 127.0.0.1 合理,對自己的區域網路可以接受,對公網就是錯的。
當錯誤代號不是 67 的時候
同一份文件還列出 net use 對 WebDAV 端點回傳的其他代號,它們比 67 有用得多。認得它們,就不會把 WebClient 的解法套到權限問題上。
| 錯誤 | Windows 印出的文字 | 實際意義 |
|---|---|---|
| 5 | Access is denied | 帳號或密碼錯誤,或對內容沒有權限 |
| 58 | The specified server cannot perform the requested operation | 伺服器主機名稱繫結不符 |
| 59 | An unexpected network error occurred | 站台或其應用程式集區已停止 |
| 224 | Access Denied. Before opening files in this location, you must first add the web site to your trusted sites list | URL 所在的區域不被重定向程式信任 |
| 1244 | The operation being request was not performed because the user has not been authenticated | 沒有啟用任何驗證方式,或登入類型不符 |
| 1920 | The file cannot be accessed by the system | 該帳號沒有對應的編寫規則 |
1244 那句話連拼字錯誤都是微軟原文。
重開機之後就消失的對應
對應可用但登出後消失,這是有記載的行為而不是 bug:微軟明確說明從 Windows 7 起,Basic 驗證的憑證無法由憑證管理員保存,並在自家的疑難排解文章裡建議用登入指令碼重新執行 net use。對包含本機服務在內的 Basic 驗證 WebDAV,這就是實務上的答案。
powershell
if (-not (Test-Path Y:)) {
net use Y: http://127.0.0.1:3211/ /user:anystorage
}對應本機的 WebDAV 伺服器,例如 AnyStorage
AnyStorage 就在你面前這台電腦上跑 WebDAV 伺服器:側邊欄 Services、WebDAV 頁籤、Start,端點是 http://127.0.0.1:3211。應用程式裡開著的每個連線都是根底下的一個資料夾,所以一個磁碟機代號就能到達 S3 儲存桶、Cloudflare R2、Backblaze B2、MinIO、Google 雲端硬碟、OneDrive、Dropbox 或 SFTP 主機。不必安裝檔案系統驅動程式,所以 WinFsp 從來不會登場。
Windows 不會因為伺服器在本機就放寬規則,上面的項目照樣適用:HTTP 端點需要 BasicAuthLevel 為 2。帳號預設 anystorage,密碼是首次使用時產生的 24 個字元,兩者都在 WebDAV 頁籤裡附複製按鈕。免費版的掛載唯讀,讀寫屬於 Pro。連線是延遲建立的,所以啟動後只有在應用程式裡開過的連線才會出現在根目錄。
錯誤 67 和 0x80070043 是同一件事嗎?
是。67 是 Win32 的 ERROR_BAD_NET_NAME,0x80070043 是同一個值包成 HRESULT 供外殼顯示。
net use 成功了,但檔案總管裡看不到磁碟機?
它們在不同的安全性內容中執行。用管理員命令提示字元建立的對應,非管理員的檔案總管看不到,反之亦然。想在檔案總管看到,就用一般的命令提示字元執行。
URL 結尾要加斜線嗎?
加了沒壞處。重定向程式的第一個請求是對你給的路徑送 OPTIONS,有些伺服器對此敏感。不加失敗時,先補斜線再去懷疑憑證。
這些步驟可以全部跳過嗎?
只為瀏覽的話,磁碟機代號確實方便。大量傳輸建議在直接對接儲存 API 的用戶端裡做:沒有服務要啟動,沒有登錄檔要改,也沒有 4GB 的單檔上限。
接著看
- 檔案總管裡的同一個錯誤:WebDAV 錯誤 0x80070043
- 還有什麼會弄壞 Windows 的 WebDAV 對應:Windows 無法連線 WebDAV
- 複製到 50MB 就停:Windows WebDAV 50MB 限制