添加入站规则时必须设置Direction、Enabled和Action三属性,否则抛0x80070057;删除前需用Rules.Item()验证存在性,避免0x80070490;修改规则须获取原引用再改属性,不可同名覆盖。
用
添加入站规则时,必须设置
和
直接 new 一个
对象后不设关键属性就调用
,会抛出
(参数错误)。Windows
防火墙
COM 接口非常严格,
(方向)、
(是否启用)、
(允许/阻止)这三项缺一不可。
实操建议:
必须是
或
,不能为
或留空
设为
或
,不能用布尔值代替
必须显式设为
或
,哪怕你想加完立刻禁用
规则名(
)建议带唯一前缀(如
),避免和系统规则冲突
删除规则前先检查是否存在,否则
会抛
防火墙规则名不区分大小写,但完全匹配——
和
被视为不同规则。直接调用
而不验证存在性,一旦名字拼错或已被删,就会触发
错误(0x80070490)。
安全做法:
用
尝试获取规则对象,捕获
判断是否存在
或遍历
集合,用
精确查找
删除后不要假设规则已消失:可再次遍历确认,尤其在自动化脚本中
修改已有规则要用
获取再改属性,不能直接 new 同名规则覆盖
Windows 防火墙不支持“覆盖添加”:即使你用相同
新建一个
并调用
,它不会替换旧规则,而是报
(文件已存在)。真正生效的修改方式,是先通过
拿到原规则引用,再改其属性(如
、
),最后无需显式保存——COM 接口会自动持久化。
Trae win
Trae Windows 官方版本现已全面支持 Win10 和 Win11 系统(64位)。国内开发者可直接访问 Trae 中文官网(trae.cn 或 trae.com.cn),一键下载官方正版 .exe 安装包,享受国内直连的高速稳定体验。安装过程极其简便,双击即可运行,并支持一键无缝导入 VS Code 或 Cursor 的原有主题、快捷键及插件配置。登录支持手机号、微信或稀土掘金账号。内置免费的豆包与 DeepSeek 等顶级大模型,让你开箱即用,轻松开启高效的 AI 智能编程之旅。
下载
注意点:
改成
是合法的,但写成
会静默失败(只认逗号分隔)
修改
时,
可用,但
不被识别
如果规则被组策略锁定(常见于域环境),即使代码执行成功,实际策略仍可能被后台覆盖
需要管理员权限 + COM 初始化,否则
创建就失败
调用
创建
时,若进程没以管理员身份运行,会返回
或抛
;更隐蔽的是,若没调用
(尤其在非 UI 线程),某些 Windows 版本下
表面成功,实际规则未写入磁盘。
必须步骤:
程序 manifest 中声明
,否则 UAC 会拦截
在调用任何防火墙 COM 接口前,主线程执行
不要在 .NET Core/.NET 5+ 的默认线程池线程上操作——它们不保证 COM 上下文,优先切回 STA 主线程
最易被忽略的一点:规则生效有延迟,特别是远程地址范围变更后,有时需等几秒或手动触发
才能立即反映。别依赖“Add 后立刻连通”做自动化断言。
INetFwRuleDirectionEnabledINetFwRuleFirewallPolicy.Rules.Add()0x80070057DirectionEnabledActionDirectionNET_FW_RULE_DIRECTION_.INNET_FW_RULE_DIRECTION_.OUT0ActionNET_FW_ACTION_.ALLOWNET_FW_ACTION_.BLOCKEnabledtruefalseName"MyApp-HTTP-In"Rules.Remove()0x80070490"myapp-port80""MyApp-Port80"Rules.Remove("MyApp-Port80")E_ELEMENT_NOT_FOUNDRules.Item(name)COMExceptionRulesrule.Name.Equals(name, StringComparison.OrdinalIgnoreCase)Rules.Item()NameINetFwRuleAdd()0x800700b7Rules.Item(name)LocalPortsRemoteAddressesLocalPorts"8080,8081""8080-8081"RemoteAddresses"192.168.1.0/24""192.168.1.*"INetFwMgrActivator.CreateInstance(Type.GetTypeFromCLSID(...))INetFwMgrnullAccess is deniedCoInitializeExRules.Add()requireAdministratorCoInitializeEx(IntPtr.Zero, COINIT.COINIT_APARTMENTTHREADED)netsh advfirewall firewall reload