如何禁用 Windows 防火墙?
How can I disable Windows Firewall?
Windows 7, 8.1
当我尝试禁用 Windows 防火墙时出现异常。我尝试使用管理员权限来做到这一点。但是 Windows 防火墙 启用 我没有同样的问题。
Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
INetFwMgr mgr = (INetFwMgr)Activator.CreateInstance(NetFwMgrType);
// Get the Windows Firewall status
bool firewallEnabled = mgr.LocalPolicy.CurrentProfile.FirewallEnabled;
// it works fine...
String frw_status = "Windows Firewall is " + (firewallEnabled ?
"enabled" : "disabled");
// Enable or disable firewall.
// I get the exception here when I try to disable Windows Firewall.
// I have not problem when I try to enable Windows Firewall (it works fine).
//
// Exception message:
// An unhandled exception of type 'System.NotImplementedException'
// occurred in net_sandbox.exe
// Additional information: Method or operation is not emplemented yet..
mgr.LocalPolicy.CurrentProfile.FirewallEnabled = false;
如何禁用 Windows 防火墙?
看来您使用的是 Windows XP SP2 COM API,已知在 Windows Vista/7 和更新版本上存在问题。
建议您使用较新的 API:
(我没测试过这个)
Type netFwPolicy2Type = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
INetFwPolicy2 mgr = (INetFwPolicy2)Activator.CreateInstance(netFwPolicy2Type);
// Gets the current firewall profile (domain, public, private, etc.)
NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes = (NET_FW_PROFILE_TYPE2_)mgr.CurrentProfileTypes;
// Get current status
bool firewallEnabled = mgr.get_FirewallEnabled(fwCurrentProfileTypes);
string frw_status = "Windows Firewall is " + (firewallEnabled ?
"enabled" : "disabled");
// Disables Firewall
mgr.set_FirewallEnabled(fwCurrentProfileTypes, false);
private const string CLSID_FIREWALL_MANAGER =
"{304CE942-6E39-40D8-943A-B913C40C9CD4}";
private static NetFwTypeLib.INetFwMgr GetFirewallManager()
{
Type objectType = Type.GetTypeFromCLSID(
new Guid(CLSID_FIREWALL_MANAGER));
return Activator.CreateInstance(objectType)
as NetFwTypeLib.INetFwMgr;
}
public static void Firewall()
{
INetFwMgr manager = GetFirewallManager();
bool isFirewallEnabled = manager.LocalPolicy.CurrentProfile.FirewallEnabled;
manager.LocalPolicy.CurrentProfile.FirewallEnabled = false;
}
并在 Main.cs
yourclass.Firewall();
Windows 7, 8.1
当我尝试禁用 Windows 防火墙时出现异常。我尝试使用管理员权限来做到这一点。但是 Windows 防火墙 启用 我没有同样的问题。
Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
INetFwMgr mgr = (INetFwMgr)Activator.CreateInstance(NetFwMgrType);
// Get the Windows Firewall status
bool firewallEnabled = mgr.LocalPolicy.CurrentProfile.FirewallEnabled;
// it works fine...
String frw_status = "Windows Firewall is " + (firewallEnabled ?
"enabled" : "disabled");
// Enable or disable firewall.
// I get the exception here when I try to disable Windows Firewall.
// I have not problem when I try to enable Windows Firewall (it works fine).
//
// Exception message:
// An unhandled exception of type 'System.NotImplementedException'
// occurred in net_sandbox.exe
// Additional information: Method or operation is not emplemented yet..
mgr.LocalPolicy.CurrentProfile.FirewallEnabled = false;
如何禁用 Windows 防火墙?
看来您使用的是 Windows XP SP2 COM API,已知在 Windows Vista/7 和更新版本上存在问题。
建议您使用较新的 API:
(我没测试过这个)
Type netFwPolicy2Type = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
INetFwPolicy2 mgr = (INetFwPolicy2)Activator.CreateInstance(netFwPolicy2Type);
// Gets the current firewall profile (domain, public, private, etc.)
NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes = (NET_FW_PROFILE_TYPE2_)mgr.CurrentProfileTypes;
// Get current status
bool firewallEnabled = mgr.get_FirewallEnabled(fwCurrentProfileTypes);
string frw_status = "Windows Firewall is " + (firewallEnabled ?
"enabled" : "disabled");
// Disables Firewall
mgr.set_FirewallEnabled(fwCurrentProfileTypes, false);
private const string CLSID_FIREWALL_MANAGER =
"{304CE942-6E39-40D8-943A-B913C40C9CD4}";
private static NetFwTypeLib.INetFwMgr GetFirewallManager()
{
Type objectType = Type.GetTypeFromCLSID(
new Guid(CLSID_FIREWALL_MANAGER));
return Activator.CreateInstance(objectType)
as NetFwTypeLib.INetFwMgr;
}
public static void Firewall()
{
INetFwMgr manager = GetFirewallManager();
bool isFirewallEnabled = manager.LocalPolicy.CurrentProfile.FirewallEnabled;
manager.LocalPolicy.CurrentProfile.FirewallEnabled = false;
}
并在 Main.cs
yourclass.Firewall();