EasyBuilder Pro 搜尋 HMI 說找不到介面卡?明明裝了 Npcap,兇手是資料夾裡的舊版 WinPcap DLL
目錄9 個章節
現場要把一台 Weintek HMI 的工程檔撈回電腦,偏偏這台不是我設定的,手上也沒有它的 IP。
沒關係,EasyBuilder Pro 的 Utility Manager 可以用”HMI 名稱”搜尋,讓軟體自己在網路上找。
按下搜尋,跳出來的是這個:
無法搜尋到介面卡!請確認 WinPcap 是否已經安裝.
問題是這台電腦明明有裝 Npcap(WinPcap 的後繼版本),Wireshark 也抓封包抓得好好的。
TL;DR
症狀:EasyBuilder Pro 用 HMI 名稱搜尋,跳出”無法搜尋到介面卡”,但電腦其實有裝 Npcap。
原因:C:\EBpro裡附了一份 WinPcap 4.1.3 的wpcap.dll、Packet.dll,Windows 會優先載入它們,而它們配套的舊驅動npf早就不在電腦上。
解法:把這兩個 DLL 改名備份,程式就會改用系統資料夾裡 Npcap 的相容版 DLL。
還原:把檔名改回來就好。
為什麼裝了 Npcap 還叫我裝 WinPcap?
因為 EasyBuilder 載入的是自己資料夾裡的舊版 WinPcap DLL,根本沒用到你裝的 Npcap。
錯誤訊息看起來像是沒裝,實際上是裝了,只是程式拿錯了 DLL。 那句”請確認 WinPcap 是否已經安裝”,只是程式找不到網卡之後給的制式提示。

最讓人困惑的是這三件事同時成立:
- 電腦上有裝 Npcap 1.89,而且開了 WinPcap 相容模式。
- Wireshark 4.6.8 抓封包正常,所有網卡都看得到。
- 只有 EasyBuilder 說它一張網卡都找不到。
我的環境
| 項目 | 版本/說明 |
|---|---|
| 作業系統 | Windows 11 家用版 23H2(10.0.22631),64 位元 |
| HMI 軟體 | Weintek EasyBuilder Pro 6.10.02,安裝在 C:\EBpro |
| 出問題的工具 | Utility Manager(UtilityManagerEx.exe,32 位元) |
| 封包驅動 | Npcap 1.89,已開啟 WinPcap API-compatible Mode |
| 其他軟體 | Wireshark 4.6.8,跟 Npcap 一起安裝 |
| 目標 HMI | 名稱 cMT-5BE3,用乙太網路連線 |
出錯的操作路徑:Utility Manager → 上傳 (HMI→PC) → 乙太網路 → HMI 名稱 → 搜尋(S) 或 搜尋全部(E)。
名稱搜尋跟 WinPcap 有什麼關係?
名稱搜尋要直接收送底層封包,Windows 本身做不到,所以要靠 WinPcap 或 Npcap 這類封包驅動。
IP 連線不需要,名稱搜尋才需要
Utility Manager 連 HMI 有兩種方式。
IP 頁籤是直接用 IP 建一般的 TCP 連線,不需要 WinPcap 或 Npcap。
HMI 名稱頁籤是在網路上送出搜尋封包、等 HMI 回應,就算不知道 IP 也找得到。 它不走一般的 IP 連線,所以要靠封包驅動。
💡 用 IP 連線,像是知道對方電話直接撥過去;用名稱搜尋,則像在整層樓大喊”cMT-5BE3 在哪裡?“等對方回應。要能大喊,就得有 WinPcap/Npcap 這支擴音器。
WinPcap 和 Npcap 是什麼關係?
Npcap 是 Nmap 專案維護的 Windows 封包驅動,WinPcap 停止維護後的接班人。
| WinPcap | Npcap | |
|---|---|---|
| 狀態 | 已停止維護,最後一版是 4.1.3(2013 年) | 持續更新中 |
| 驅動名稱 | npf(npf.sys) | npcap(npcap.sys) |
| 誰在用 | 老舊軟體,很多工控軟體還在依賴它 | Wireshark 3.0 之後的安裝檔都改附 Npcap |
| 相容性 | 無 | 有 WinPcap API-compatible Mode,讓舊程式也能用 |
也就是說,WEINTEK 可能是使用一個 2013 年就停更的東西(十三年了),但畢竟工控本來就是求穩的東西(俗話說,沒事就別亂動它)。
這裡有兩個重點要記住。
第一,DLL 跟驅動必須是配套的。程式呼叫 wpcap.dll,wpcap.dll 再呼叫 Packet.dll,最後由 Packet.dll 跟驅動溝通。WinPcap 的 DLL 配 WinPcap 的驅動,Npcap 的 DLL 配 Npcap 的驅動。
第二,Npcap 用相容模式安裝時,會要求先移除 WinPcap。所以很常見的情況是:為了 Wireshark 裝了 Npcap,原本的 WinPcap 連同 npf 驅動就一起被移除了。
程式 (EasyBuilder / Wireshark)
│
▼
wpcap.dll ← 對程式提供功能的"前台"
│
▼
Packet.dll ← 負責跟驅動溝通的"窗口"
│
▼
驅動程式 ← WinPcap 用 npf.sys;Npcap 用 npcap.sys
│
▼
網卡
Windows 找 DLL 的順序
程式需要某個 DLL 時,Windows 會依序到這些地方找,找到第一個就用它:
- 程式自己所在的資料夾(這次的關鍵)
- 系統資料夾:64 位元程式用
C:\Windows\System32,32 位元程式跑在 64 位元 Windows 上用C:\Windows\SysWOW64 - Windows 資料夾
C:\Windows - 目前的工作目錄
- 環境變數
PATH列出的資料夾
所以只要程式資料夾裡有一份 wpcap.dll,系統資料夾裡那份就不會被用到,就算系統那份比較新、比較正確也一樣。
我怎麼一步步查出兇手?
從驅動、設定、系統 DLL 一路往下查,最後在 EasyBuilder 自己的安裝資料夾找到兩個舊 DLL。
以下都在 PowerShell 執行,一般權限就可以,不需要系統管理員。
確認封包驅動服務
Get-Service -Name npcap, npf -ErrorAction SilentlyContinue |
Format-Table Name, Status, StartType -AutoSize
Name Status StartType
---- ------ ---------
npcap Running System
只有 Npcap 的驅動在跑,沒有舊版 WinPcap 的 npf 服務。
確認 Npcap 的設定
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\npcap\Parameters" |
Select-Object AdminOnly, WinPcapCompatible
AdminOnly : 0 ← 沒有限制只有系統管理員能用
WinPcapCompatible : 1 ← 已開啟 WinPcap 相容模式
Npcap 本身的設定沒問題。
確認系統資料夾裡的 DLL
foreach ($p in "C:\Windows\System32\wpcap.dll",
"C:\Windows\SysWOW64\wpcap.dll",
"C:\Windows\System32\Packet.dll",
"C:\Windows\SysWOW64\Packet.dll") {
$v = (Get-Item $p).VersionInfo
"{0} {1} {2}" -f $p, $v.ProductName, $v.FileVersion
}
C:\Windows\System32\wpcap.dll libpcap 1.10.7
C:\Windows\SysWOW64\wpcap.dll libpcap 1.10.7
C:\Windows\System32\Packet.dll Npcap 1.89
C:\Windows\SysWOW64\Packet.dll Npcap 1.89
系統資料夾裡放的是 Npcap 提供的相容版 DLL,也正常。
確認舊驅動 npf.sys 還在不在
Test-Path "C:\Windows\System32\drivers\npf.sys" # 舊 WinPcap 驅動
Test-Path "C:\Windows\System32\drivers\npcap.sys" # Npcap 驅動
結果 npf.sys 是 False,npcap.sys 是 True。電腦上完全沒有舊版 WinPcap 的驅動。
前四項查下來全部正常。
系統這邊沒問題,那就只剩程式自己了。
翻 EasyBuilder 的安裝資料夾,找到了
Get-ChildItem "C:\EBpro" -Recurse -Include "wpcap*.dll", "Packet*.dll" |
ForEach-Object {
$v = $_.VersionInfo
"{0} {1} {2}" -f $_.FullName, $v.ProductName, $v.FileVersion
}
C:\EBpro\Packet.dll WinPcap 4.1.0.2980
C:\EBpro\wpcap.dll WinPcap 4.1.0.2980
EasyBuilder Pro 自己的資料夾裡,放了一份 WinPcap 4.1.3 的 DLL(4.1.3 的 DLL 檔案版本就是 4.1.0.2980,不是我看錯)。
兇手就住在程式自己家裡😆
確認 Utility Manager 是幾位元
讀執行檔 PE 標頭裡的 Machine 欄位,就能判斷程式是幾位元:
$bytes = [System.IO.File]::ReadAllBytes("C:\EBpro\UtilityManagerEx.exe")
$peStart = [BitConverter]::ToInt32($bytes, 60)
$machine = [BitConverter]::ToUInt16($bytes, $peStart + 4)
"0x{0:X4}" -f $machine # 0x014C = 32 位元,0x8664 = 64 位元
結果是 0x014C,32 位元。
這代表它如果在自己的資料夾找不到 DLL,就會去 C:\Windows\SysWOW64 找,而那裡剛好有 Npcap 的相容版 DLL。解法的方向就出來了。
真正的原因是什麼?
EasyBuilder 用的是自己附的舊版 WinPcap DLL,而這個 DLL 配套的舊驅動早就不在電腦上了。
【出問題時】
UtilityManagerEx.exe(32 位元)
│ Windows 先找"程式自己的資料夾"
▼
C:\EBpro\wpcap.dll、Packet.dll ← WinPcap 4.1.3(舊)
│ 舊版 Packet.dll 只認得舊驅動 NPF
▼
npf.sys ✘ 不存在(電腦上只有 Npcap 的 npcap.sys)
│
▼
一張網卡都列不出來
│
▼
"無法搜尋到介面卡!請確認 WinPcap 是否已經安裝."
💡 EasyBuilder 手上拿的是舊電視的遙控器(舊版 DLL),但家裡的電視已經換成新的了(Npcap 驅動)。新電視好好的,舊遙控器就是配對不上,所以程式才說”找不到電視”。
常見的發生經過
- 電腦上先裝了 EasyBuilder Pro,資料夾裡附有 WinPcap 4.1.3 的 DLL。
- 後來為了抓封包、除錯通訊,裝了 Wireshark。Wireshark 3.0 之後附的是 Npcap。
- Npcap 用 WinPcap 相容模式安裝時會要求先移除 WinPcap,舊的
npf驅動就不見了。 - EasyBuilder 還是照樣載入自己資料夾裡的舊 DLL,找不到配套的驅動,名稱搜尋就失敗了。
我這台的 Wireshark 4.6.8 跟 Npcap 1.89 是同一天裝的,在那之前有沒有裝過 WinPcap 已經查不到了,但結果一樣:現在電腦上只有 Npcap 的驅動。
身為 IOT 工控人,沒想到裝了 Wireshark 後,Weintek 居然會無法連線搜尋…如果以前我一定慌了,花很久的時間爬文、測試,現在有 AI 可以協助處理,真的是太美好了。
怎麼確認你也是同一個問題?
跑下面這段 PowerShell,看 EasyBuilder 資料夾裡的 DLL 是不是 WinPcap 4.1.x 就知道。
# ============================================================
# EasyBuilder Pro "無法搜尋到介面卡" 問題檢查
# 使用前請把 $EBproPath 改成你的 EasyBuilder Pro 安裝路徑
# ============================================================
$EBproPath = "C:\EBpro"
# [1] 封包驅動服務:npcap = Npcap,npf = 舊版 WinPcap
Write-Host "`n[1] 封包驅動服務"
Get-Service -Name npcap, npf -ErrorAction SilentlyContinue |
Format-Table Name, Status, StartType -AutoSize
# [2] Npcap 是否開啟 WinPcap 相容模式(1 = 有開)
Write-Host "[2] Npcap WinPcap 相容模式(1 = 有開)"
$npcapParam = Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\npcap\Parameters" -ErrorAction SilentlyContinue
if ($npcapParam) {
$npcapParam.WinPcapCompatible
} else {
"找不到 Npcap 設定(可能沒有安裝 Npcap)"
}
# [3] 列出系統資料夾與 EasyBuilder 資料夾中的 pcap DLL 版本
Write-Host "`n[3] pcap DLL 位置與版本"
$dllList = @(
"C:\Windows\System32\wpcap.dll",
"C:\Windows\System32\Packet.dll",
"C:\Windows\SysWOW64\wpcap.dll",
"C:\Windows\SysWOW64\Packet.dll",
"$EBproPath\wpcap.dll",
"$EBproPath\Packet.dll"
)
foreach ($dll in $dllList) {
if (Test-Path $dll) {
$info = (Get-Item $dll).VersionInfo
"{0,-32} {1} {2}" -f $dll, $info.ProductName, $info.FileVersion
} else {
"{0,-32} (不存在)" -f $dll
}
}
怎麼判讀:
| 檢查結果 | 判斷 | 建議 |
|---|---|---|
有 npcap、沒有 npf,EasyBuilder 資料夾裡的 DLL 是 WinPcap 4.1.x | 跟本文同一個問題 | 照下面的方案 B 做 |
有 npcap,但 WinPcapCompatible 不是 1,或 SysWOW64\wpcap.dll 不存在 | Npcap 沒開相容模式 | 先重裝 Npcap 並勾選 WinPcap API-compatible Mode,再做方案 B |
npcap 和 npf 都沒有 | 完全沒裝封包驅動 | 裝 Npcap 並勾選相容模式,EasyBuilder 資料夾裡有舊 DLL 的話一樣要做方案 B |
有 npf(舊 WinPcap 還在),但搜尋還是失敗 | 不是 DLL 的問題 | 往網路方向查:網段、交換器、防火牆、多網卡 |
有哪幾種解法可以選?
三條路:改用 IP、把舊 DLL 改名、移除 Npcap 換回 WinPcap。我選的是改名。
| 方案 | 做法 | 優點 | 缺點 |
|---|---|---|---|
| A. 改用 IP 連線 | 切到”IP”頁籤,直接輸入 HMI 的 IP | 什麼都不用改,馬上可用 | 必須知道 HMI 的 IP,去撈別人設定的 HMI 時就沒辦法 |
| B. 把舊 DLL 改名(本次採用) | 把 C:\EBpro 的 wpcap.dll、Packet.dll 改名備份,讓程式改用系統裡 Npcap 的相容版 DLL | Wireshark 照常能用、隨時可以改回來、不用裝或移除任何軟體 | 不是 Weintek 官方做法;EasyBuilder 更新或重裝後,舊 DLL 可能又被放回來 |
| C. 移除 Npcap,改裝 WinPcap 4.1.3 | 回到 EasyBuilder 原本預期的環境 | 跟 EasyBuilder 預期的環境一致 | Wireshark 4.x 需要 Npcap,移除後就不能抓封包;WinPcap 2013 年就停更,在 Windows 11 上驅動可能不穩定 |
💡 理論上還有一種變化做法:重裝 Npcap 時不勾相容模式,再另外裝 WinPcap 4.1.3 讓兩者並存。步驟比較多,WinPcap 在新系統上的穩定性也有疑慮,這個我沒有實測。
因為我在電腦裝 Wireshark 懶得做那麼多測試,所以直接走方案 B。
為了 EasyBuilder 把 Npcap 拆掉、換回停更十三年的 WinPcap,等於為了一支舊遙控器把新電視退貨,Wireshark 還會跟著不能用。
方案 A 是知道 IP 時最省事的做法,但我這次就是不知道 IP >.<
舊 DLL 要怎麼改名?
關掉 Utility Manager,把 C:\EBpro 的 wpcap.dll、Packet.dll 改名,重開就好。
動手前先確認兩件事
- Npcap 有開 WinPcap 相容模式:前面查的
WinPcapCompatible要是1,而且C:\Windows\SysWOW64\wpcap.dll要存在。沒開的話,舊 DLL 改名後程式會完全找不到wpcap.dll,可能連 Utility Manager 都打不開。這時要先重裝 Npcap,安裝時勾選”Install Npcap in WinPcap API-compatible Mode”。 - 找到 EasyBuilder Pro 的安裝路徑:我的是
C:\EBpro,你裝在別的地方的話,下面指令的路徑要跟著改。
改名步驟
-
完全關閉 Utility Manager(只關上傳對話框不算,舊 DLL 已經載進記憶體了)。其他 EasyBuilder 工具最好也一起關掉。
-
用 PowerShell 把舊版 DLL 改名備份:
# 把 EasyBuilder Pro 資料夾中的舊版 WinPcap DLL 改名備份(不是刪除) Rename-Item "C:\EBpro\wpcap.dll" "wpcap.dll.winpcap413.bak" Rename-Item "C:\EBpro\Packet.dll" "Packet.dll.winpcap413.bak"在檔案總管直接改也行:
wpcap.dll改成wpcap.dll.winpcap413.bak,Packet.dll改成Packet.dll.winpcap413.bak。 -
重開 Utility Manager,照原本的路徑再搜一次:上傳 (HMI→PC) → 乙太網路 → HMI 名稱 → 搜尋。
我的 C:\EBpro 用一般權限就能改名。如果你的 EasyBuilder 裝在 C:\Program Files 底下,可能要用系統管理員身分開 PowerShell,或在檔案總管按”繼續”取得權限。
搜到了。
錯誤沒再跳出來,網路上的 HMI 也找到了,工程檔順利上傳。改名後的載入路徑變成這樣:
【改名之後】
UtilityManagerEx.exe(32 位元)
│ 程式資料夾裡找不到 wpcap.dll → 改到系統資料夾找
▼
C:\Windows\SysWOW64\wpcap.dll、Packet.dll ← Npcap 1.89 提供的相容版
│
▼
npcap.sys ✔ 正常運作
│
▼
列出網卡 → 搜尋到 HMI
怎麼還原
改完出現其他問題,或想恢復原狀,就先關閉 Utility Manager,再把檔名改回來:
Rename-Item "C:\EBpro\wpcap.dll.winpcap413.bak" "wpcap.dll"
Rename-Item "C:\EBpro\Packet.dll.winpcap413.bak" "Packet.dll"
檔案只是改名沒有刪除,所以可以完整還原。
改完之後要注意什麼?
- EasyBuilder 更新或重裝後,安裝程式可能會把舊版 DLL 放回
C:\EBpro。名稱搜尋又跳同樣的錯誤時,先檢查這兩個檔案是不是又回來了。 C:\EBpro裡其他會用到wpcap.dll的 EasyBuilder 工具,也會跟著改用系統的 Npcap 版本。- 這不是 Weintek 的官方做法。原理是 Npcap 官方提供的 WinPcap 相容機制,但遇到異常的話,建議先還原,再問原廠。
- 名稱搜尋送出的封包過不了路由器。電腦和 HMI 要在同一個區域網路裡,例如同一台交換器、同一個 VLAN,中間隔著路由器或防火牆的話,DLL 問題解決了也搜不到。
- 多張網卡在同一個網段時要小心。我這台的有線網卡和 Wi-Fi 都在
192.168.10.x,封包有可能從錯的網卡送出去。搜尋結果不穩定的話,先暫時關掉 Wi-Fi 再試。 - VMware、VPN(例如 eCatcher)這類虛擬網卡也會被列進網卡清單。一般不影響搜尋,但結果怪怪的話,可以先停用這些虛擬網卡再測。
至於第 2 點那些工具改用 Npcap 之後會不會出狀況,我目前只驗證過 Utility Manager 的名稱搜尋跟上傳,其他的還沒碰到。
常見問題
Q:為什麼 Wireshark 抓得到網卡,EasyBuilder 卻抓不到?
A:Wireshark 用的是 Npcap 自己的 DLL(在 C:\Windows\System32\Npcap\),DLL 跟驅動是配套的。EasyBuilder 用的是自己資料夾裡的舊版 WinPcap DLL,跟現在的驅動配不起來。
Q:可以直接把 C:\EBpro 裡的 DLL 刪掉嗎?
A:不建議。改名的效果跟刪除一樣,之後想還原時,把檔名改回來就好。
Q:用 IP 連線也會遇到這個問題嗎?
A:不會。IP 連線走一般的 TCP 通訊,不需要 WinPcap 或 Npcap,只有”HMI 名稱”搜尋這類要收送底層封包的功能才會受影響。
Q:EasyBuilder 更新之後又跳同樣的錯誤怎麼辦?
A:先看 C:\EBpro 裡的 wpcap.dll、Packet.dll 是不是又被安裝程式放回來了,是的話照上面的步驟再改名一次。