如何在安装过程中使用 install4j 打开 Windows 防火墙端口?
我为 c# 找到了这个解决方案,但我无法将它移植到 install4j 自定义代码: http:
//www.codeproject.com/Articles/14906/Open-Windows-Firewall-During-Installation
也许有人有想法或替代解决方案?
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 对它接收的参数很挑剔。更糟糕的是,当它无法解析您的输入时,它往往会打印出非常无用和误导性的消息。所以请注意以下几点:
- 将每个 netsh 命令作为单独的参数传递。在属性表中使用分号分隔它们。在由换行符分隔的编辑对话框中。
- 不要在你的论点中使用引号。如果 Microsoft 文档告诉您指定这样的规则名称:
name="rule name"
,则仅在命令行中执行此操作。从 install4j 开始,参数应该name=rule name
不带引号。 - 确保您的论点不包含任何不应该包含的内容,例如它们不属于的地方的空白。netsh 不喜欢这样。
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