如何在安装期间打开防火墙端口?

时间:2012-08-21 08:55:57

标签: java windows firewall install4j windows-firewall

如何在安装install4j期间打开Windows防火墙端口?
我为c#找到了这个解决方案,但我无法将其移植到install4j自定义代码:
http://www.codeproject.com/Articles/14906/Open-Windows-Firewall-During-Installation

也许有人有想法或替代解决方案?

2 个答案:

答案 0 :(得分:2)

问题问题已经有一段时间了,但是这是我用install4j 5.1 / 6.1做的方式

对于每个防火墙规则,我使用“运行可执行文件或批处理文件”操作,并使用以下参数:

可执行文件:${installer:sys.system32Dir}\netsh.exe

工作目录:${installer:sys.system32Dir}

参数:取决于我想要创建的规则,使用netsh语法。

例如:advfirewall; firewall; add; rule; name=${compiler:sys.shortName} UDP IN; dir=in; action=allow; service=${compiler:sys.shortName}; localip=any; remoteip=any; localport=any; remoteport=any; protocol=udp; interfacetype=any; security=notrequired; edge=no; profile=any; enable=yes

或者,从编辑对话框中:

advfirewall
firewall
add
rule
name=${compiler:sys.shortName} UDP IN
dir=in
action=allow
service=${compiler:sys.shortName}
localip=any
remoteip=any
localport=any
remoteport=any
protocol=udp
interfacetype=any
security=notrequired
edge=no
profile=any
enable=yes

一个警告:

netsh对于它收到的参数很挑剔。更糟糕的是,当它无法解析您的输入时,它往往会打印出非常无用且误导性的消息。请注意以下几点:

  1. 将每个netsh命令作为单独的参数传递。在属性表中使用分号分隔它们。在由换行符分隔的编辑对话框中。
  2. 不要在参数中使用引号。如果Microsoft文档告诉您指定如下所示的规则名称:name="rule name",则仅在命令行中执行此操作。从install4j开始,参数应为name=rule name ,不带引号
  3. 确保您的参数不包含任何不应该包含的内容,就像不属于的地方的空格一样。 netsh不喜欢那样。

答案 1 :(得分:1)

Thx,我找到了一个类似的解决方案,我刚刚创建了一个“ firewall.cmd”,其中包含允许其在安装过程中从install4j运行的规则。 “ firewall.cmd”的内容:

netsh.exe advfirewall firewall delete rule name="QOMET-IN"
netsh.exe advfirewall firewall delete rule name="QOMET-OUT"
netsh.exe advfirewall firewall add rule name="QOMET-IN" protocol=TCP dir=in localport=3050,29418-29430,14416 security=notrequired action=allow profile=any enable=yes
netsh.exe advfirewall firewall add rule name="QOMET-OUT" protocol=TCP dir=out remoteport=3050,29418-29430,14416,20,21,25,587,80 security=notrequired action=allow profile=any enable=yes