Inno setup 如何添加出站Windows防火墙例外?

Inno setup 如何添加出站Windows防火墙例外?,inno-setup,windows-firewall,Inno Setup,Windows Firewall,我需要为我正在编写的应用程序的出站连接打开Windows防火墙 我找到的最佳答案如下: 问题是该方法只创建入站规则,而不是出站规则。(C#和InnoSetup脚本都使用相同的方法。)这对我来说完全没有用 Windows防火墙的默认行为是允许出站流量,但这并不保证有人不会改变这一点 我更愿意在安装程序中(使用InnoSetup)而不是在C#中完成这项工作 我错过什么了吗 有人知道如何创建出站规则吗 TechNet有: 虽然我假设您打算通过编程创建这样的规则,但如果您感兴趣的话 最后,如果您计划

我需要为我正在编写的应用程序的出站连接打开Windows防火墙

我找到的最佳答案如下:

问题是该方法只创建入站规则,而不是出站规则。(C#和InnoSetup脚本都使用相同的方法。)这对我来说完全没有用

Windows防火墙的默认行为是允许出站流量,但这并不保证有人不会改变这一点

我更愿意在安装程序中(使用InnoSetup)而不是在C#中完成这项工作

我错过什么了吗

有人知道如何创建出站规则吗

TechNet有:

虽然我假设您打算通过编程创建这样的规则,但如果您感兴趣的话


最后,如果您计划在安装期间执行此操作,InnoSetup应该能够在安装时合并必要的注册表项。

这是可以传递给Windows命令行工具的众多任务之一。netsh做了适当的事情,但是它(像netsh做的其他事情一样)几乎是不可能找到的。简单的版本是:
netsh防火墙添加允许的程序

有关详细信息,请运行:
netsh防火墙添加允许的程序?

可以在
[Run]
部分或通过调用
Exec
来完成这些操作


请注意,这在Windows 7中是折旧的;如果您只针对Vista/2008或更高版本,则应改用
netsh advfirewall-firewall
。Microsoft已经开始从前者转换为后者,但我仍然必须支持XP,因此我还没有这样做。

如果您需要为应用程序添加一些异常,您可以使用netsh

写入命令行(对于XP):

写入命令行(对于W7):

这种差异是因为netsh firewall命令已被弃用。相反,我们必须使用命令netsh advfirewall

有关使用命令netsh advfirewall firewall而不是netsh firewall命令的更多信息,请参见知识库:

示例:

为messenger.exe添加没有安全封装的传入流量规则:

netsh advfirewall firewall add rule name="allow messenger" dir=in program="c:\programfiles\messenger\msmsgs.exe" security=authnoencap action=allow
为端口80处的传出流量添加规则:

netsh advfirewall firewall add rule name="allow80" protocol=TCP dir=out localport=80 action=block
通过端口80为TCP的安全和流量加密向入站流量添加规则:

netsh advfirewall firewall add rule name="Require Encryption for Inbound TCP/80" protocol=TCP dir=in localport=80 security=authdynenc action=allow

netsh的问题在于它在某些Windows版本(例如Windows Vista Basic)上不起作用。这就是为什么添加异常时最好不使用netsh

这在Windows版本中也不太可靠;请参阅MSDN上的备注:“Windows防火墙API可在“要求”部分中指定的操作系统中使用。它可能会在后续版本中更改或不可用。对于Windows Vista及更高版本,建议使用具有高级安全API的Windows防火墙”,要求:支持的最低客户端:Windows Vista,windowsxp与SP2;支持的最低服务器:带SP1的Windows server 2003。因此,正如您所看到的,即使在Windows Vista上,也不推荐使用此API的一部分。MS有时很疯狂:-)
netsh advfirewall firewall add rule name="allow80" protocol=TCP dir=out localport=80 action=block
netsh advfirewall firewall add rule name="Require Encryption for Inbound TCP/80" protocol=TCP dir=in localport=80 security=authdynenc action=allow