我使用属性PORTS将一些http端口传递给我的安装 然后这些端口将存储到init文件中并由应用程序使用 我需要将这些端口添加到FirewallException? 但是下面的代码不起作用:
<Component Id="fwException" Guid="MyGUID">
<Condition>Privileged</Condition>
<RegistryKey Root="HKCU" Key="Software\Company\[ProductName]">
<RegistryValue Name="fwException" Value="1" KeyPath="yes" Type="integer" />
</RegistryKey>
<fire:FirewallException Id="My_Ports" Name="My Node.exe" Profile="domain" Port="[PORTS]" Protocol="tcp" Scope="localSubnet"/>
</Component>
如何向FirewallException添加多个端口?
答案 0 :(得分:1)
<强>摘要强>
在WIX 3.9(及更早版本)中,FirewallExtension仅支持Port
属性的单个整数。 Port
属性支持Formatted值,但格式化结果必须仍为单个整数。在您的情况下,[PORTS]
必须求值为单个整数。
如果Port
属性设置为“非数字”,您通常会在安装日志中看到此错误:
SchedFirewallException: Error 0x80070057: failed to parse record field: 3 as number: Not a number
从@ Sean的评论来看,多个端口应该在WIX 3.10中工作。有关功能请求的详细信息,请参阅http://wixtoolset.org/issues/4206/。
WIX 3.9及更早版本的解决方法
可以使用FirewallExtension
decarations:
<Component Id="fwException" Guid="-- YOUR GUID --">
<Condition>Privileged</Condition>
<RegistryKey Root="HKCU" Key="Software\Company\[ProductName]">
<RegistryValue Name="fwException" Value="1" KeyPath="yes" Type="integer" />
</RegistryKey>
<fire:FirewallException Id="My_Port1" Name="My Node.exe" Profile="domain" Port="[PORT1]" Protocol="tcp" Scope="localSubnet"/>
<fire:FirewallException Id="My_Port2" Name="My Node.exe" Profile="domain" Port="[PORT2]" Protocol="tcp" Scope="localSubnet"/>
</Component>
如果您需要可变数量的端口(最多可达到预定义的最大限制),您可以在每个组件上尝试1个防火墙扩展,每个组件都有一个条件:
<Component Id="fwException1" Guid="-- YOUR GUID --">
<Condition>Privileged AND PORT1</Condition>
<RegistryKey Root="HKCU" Key="Software\Company\[ProductName]">
<RegistryValue Name="fwException1" Value="1" KeyPath="yes" Type="integer" />
</RegistryKey>
<fire:FirewallException Id="My_Port1" Name="My Node.exe" Profile="domain" Port="[PORT1]" Protocol="tcp" Scope="localSubnet"/>
</Component>
<Component Id="fwException2" Guid="-- YOUR GUID --">
<Condition>Privileged AND PORT2</Condition>
<RegistryKey Root="HKCU" Key="Software\Company\[ProductName]">
<RegistryValue Name="fwException2" Value="1" KeyPath="yes" Type="integer" />
</RegistryKey>
<fire:FirewallException Id="My_Port2" Name="My Node.exe" Profile="domain" Port="[PORT2]" Protocol="tcp" Scope="localSubnet"/>
</Component>
从命令行,您可以指定多个端口:PORT1=7071
,PORT2=7072
,依此类推。这有多合适取决于您需要指定的最大端口数。