問題描述
使用 netsh
命令為軟件包中的一個(gè)程序(A.exe)和一個(gè)服務(wù)(Service B)創(chuàng)建防火墻規(guī)則(Rule C)份招,搜了一下 netsh advfirewall firewall
的用法切揭,寫下了如下命令。
netsh advfirewall firewall add rule name="Rule C"
dir=in action=allow
program="...\A.exe" service="Service B"
description="This is a description."
A.exe 和 Service B 分別運(yùn)行著一個(gè)網(wǎng)絡(luò)通信服務(wù)锁摔,測試發(fā)現(xiàn)兩個(gè)通信均收不到消息廓旬。
解決方案
查閱了 MSDN (ref: 創(chuàng)建入站程序或服務(wù)規(guī)則 (Windows 10) - Windows security | Microsoft Docs
) 的詳細(xì)說明,看到了這樣一段話谐腰。
執(zhí)行下列操作之一:
- 如果可執(zhí)行文件包含單個(gè)程序, 請單擊 "下一步"孕豹。
- 如果可執(zhí)行文件是必須全部都允許接收入站網(wǎng)絡(luò)流量的多個(gè)服務(wù)的容器, 請單擊 "自定義", 選擇 "僅應(yīng)用于服務(wù)", 單擊 "確定", 然后單擊 "下一步"。
- 如果可執(zhí)行文件是單個(gè)服務(wù)的容器或包含多個(gè)服務(wù), 但規(guī)則僅適用于其中一個(gè)服務(wù), 請單擊 "自定義", 選擇 "應(yīng)用于此服務(wù)", 然后從列表中選擇服務(wù)怔蚌。 如果該服務(wù)未顯示在列表中, 請單擊 "應(yīng)用于具有此服務(wù)簡稱的服務(wù)", 然后在文本框中鍵入該服務(wù)的短名稱巩步。 單擊 "確定", 然后單擊 "下一步"。
上面命令中的 program="...\A.exe" service="Service B"
實(shí)際的意思是將規(guī)則應(yīng)用于 “以 A.exe 為容器的 Service B”桦踊,和希望實(shí)現(xiàn)的 “一個(gè)程序 A.exe 和一個(gè)服務(wù) Service B” 就南轅北轍了椅野。
所以還是得用兩個(gè)命令,分別創(chuàng)建規(guī)則籍胯,如下(其中 B.exe 為 Service B 的容器):
netsh advfirewall firewall add rule name="Rule C"
dir=in action=allow
program="...\A.exe"
description="This is a description."
netsh advfirewall firewall add rule name="Rule D"
dir=in action=allow
program="...\B.exe" service="Service B" // service 這段可省略
description="This is a description."
MSDN Yes.