2012-05-22 55 views
4

我在這裏爲我們的程序構建安裝程序,並且我想在安裝時添加防火牆規則。 我研究了一下,還有我發現2點的方法:在安裝過程中創建防火牆規則:netsh或WindowsFirewall API?

  1. 運行netsh命令
  2. Programmaticaly與防火牆API

關於netsh-有兩種類型的命令documented-

  • 「netsh防火牆添加allowedprogram C:\ MyApp的\ MyApp.exe將 」我的 應用「 ENABLE」

    和 -

  • 「的netsh advfirewall防火牆添加規則名稱=」 我的應用 「DIR =在 行動=允許程序= 」C:\ MyApp的\ MyApp.exe將「 啓用= YES」

..哪個操作系統支持哪個?我想我可以只是運行,只是爲了確保 (我想支持XP,Vista和win7)

關於防火牆API - 使用它有什麼好處?看起來表面上看起來有點複雜(我需要找出我爲初學者運行的操作系統,因爲我需要連接到Vista中的其他dll)。

+0

我已經結束了使用: 「netsh防火牆添加allowedprogram 」C:\路徑。「 應用程序名稱ENABLE」。不要忘記路徑上的引號。這將在winXP和win7中都有效。 – Oyiwai

回答

1

如果您只是檢查是否啓用了防火牆;你可以這樣做:

NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); 
INetFwMgr Manage = (INetFwMgr)Activator.CreateInstance(NetFwMgrType); 
bool Firewallenabled = Manage.LocalPolicy.CurrentProfile.FirewallEnabled; 

然後你可以添加你的應用程序到授權的應用程序;

INetFwAuthorizedApplications applications; 
INetFwAuthorizedApplication application; 

// Input Application Name 
application.Name = 「Internet Explorer」; 

// Locate .exe 
application.ProcessImageFileName = "C:\\Program Files\\Internet Explorer\\iexplore.exe" 

// Enable 
application.Enabled = true; 

// Authorize the Application 
Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); 
     INetFwMgr Manage = (INetFwMgr)Activator.CreateInstance(NetFwMgrType); 
     applications = (INetFwAuthorizedApplications)mgr.LocalPolicy.CurrentProfile.AuthorizedApplications; 
applications.Add(application); 

你需要訪問這些COM對象:

  • NetFwTypeLib
  • HNetCfg.FwMgr

請記住,這些都是與舊COM寫XP SP2的對象; Microsoft建議您使用的地方:INetFwPolicy2。它將適用於Vista,7和8。以下是一些文檔,其中包括使用舊代碼的幾個示例文章;不知道這是否有幫助。希望它確實如此。

Vista, 7, 8

XP Service Pack 2:

Blog with those examples in detail; and explanations.