使用条件在WIX中更改Windows防火墙

时间:2014-08-01 19:25:34

标签: wix installer windows-installer

我正在尝试根据对话框中设置的属性更改Windows防火墙。我可以在日志中看到属性设置正确,但无论属性值如何,都会创建防火墙规则。

我的代码是......

<Component Id="ChangeFirewall" Guid="*" KeyPath="yes">
   <Condition><![CDATA[ChgFirewall = "True"]]></Condition>
     <fire:FirewallException Id="FW6501" Name="6501" Port="6501" 
                                         Protocol="tcp" Scope="any"/>
     <fire:FirewallException Id="FW6502" Name="6502" Port="6502" 
                                         Protocol="tcp" Scope="any"/>
     <fire:FirewallException Id="FW6505" Name="6505" Port="6505" 
                                         Protocol="tcp" Scope="any"/>
</Component>

如果ChgFirewall为False,为什么防火墙会发生变化?

更新:我添加了设置CHGFIREWALL属性的对话框的代码......

<Dialog Id="FirewallDlg" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes">
    <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="40" Transparent="yes" NoPrefix="yes">
      <Text>This program uses TCP ports 6501, 6501, and 6505 for coordinating information between workstations. These ports must be unblocked for it to work correctly</Text>
    </Control>
    <Control Id="Instructions" Type="Text" X="20" Y="70" Width="280" Height="30" Transparent="yes" NoPrefix="yes">
      <Text>This installer can attempt to automatically modify the Windows Firewall for you, or you may manually modify the firewall settings.</Text>
    </Control>
    <Control Type="RadioButtonGroup" Property="CHGFIREWALL" Id="CHGFIREWALL" Width="340" Height="44" X="20" Y="120">
      <RadioButtonGroup Property="CHGFIREWALL">
        <RadioButton Text="Have the installer update the firewwall settings for Guru (Recommended)" Height="13" Value="True" Width="340" X="0" Y="0" />
        <RadioButton Text="Manually update the firewall settings" Height="13" Value="False" Width="340" X="0" Y="15" />
      </RadioButtonGroup>
    </Control>
    <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
      <Publish Event="EndDialog" Value="Return"></Publish>
    </Control>
    <Control Id="CancelButton" Type="PushButton" Text="Cancel" Height="17" Width="56" X="180" Y="243" Cancel="yes">
      <Publish Event="EndDialog" Value="Exit" />
    </Control>
  </Dialog>

这也是我对财产的定义......

<Property Id='CHGFIREWALL' Value='False' Secure='yes'/>

1 个答案:

答案 0 :(得分:1)

作为第一步,UPPERCASE属性并设置属性'secure =“yes”。这可确保将属性作为explained in the comments here正确传递到服务器进程。

然后问题是你如何设置属性?是由自定义操作设置的,还是在属性表或命令行中设置?