4

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

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

4

2 回答 2

4

问这个问题已经有一段时间了,但这是我使用 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 不喜欢这样。
于 2014-08-28T14:10:01.177 回答
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
于 2018-08-07T06:49:12.023 回答