4

Wix インストーラーは初めてです。プログラムにファイアウォールの例外を追加しようとしています。

私のコードは次のとおりです。

<Component Id="_VIEW.EXE" Guid="*" Transitive="yes">
     <File Id="view.exe"
           Name="view.exe"
           KeyPath="yes"
           Source="$(var.INSTALLSOURCE)\view.exe">
       <fire:FirewallException Id="view_firewall_domain_tcp"
                               Name="View"
                               Protocol="tcp"
                               Scope="any"
                               IgnoreFailure="yes"
                               Profile="domain" />
       <fire:FirewallException Id="view_firewall_domain_udp"
                               Name="View"
                               Protocol="udp"
                               Scope="any"
                               IgnoreFailure="yes"
                               Profile="domain" />
       <fire:FirewallException Id="view_firewall_private_tcp"
                               Name="View"
                               Protocol="tcp"
                               Scope="any"
                               IgnoreFailure="yes"
                               Profile="private" />
       <fire:FirewallException Id="view_firewall_private_udp"
                               Name="View"
                               Protocol="udp"
                               Scope="any"
                               IgnoreFailure="yes"
                               Profile="private" />
     </File>
  </Component>

私のコードでは、4 つのファイアウォール例外を追加し、各例外は「 Profile 」属性と「Protocol 」属性に対して異なる値を持ちます。私の予想される結果は、4 つの例外が作成されることです。

NAME  GROUP   Profile   Enabled  Action  Override  Program           Local Address   Remote Address   Protocol   Local Port   Remote Port   Allowed Users  Allowed Computers
view          Domain     Yes     Allow    No       c:\test\view.exe    Any               Any            TCP         Any         Any             Any            Any
view          Domain     Yes     Allow    No       c:\test\view.exe    Any               Any            UDP         Any         Any             Any            Any
view          Private    Yes     Allow    No       c:\test\view.exe    Any               Any            TCP         Any         Any             Any            Any
view          Private    Yes     Allow    No       c:\test\view.exe    Any               Any            UDP         Any         Any             Any            Any

しかし、実際の結果は例外が 1 つだけ作成され、"Protocol" 属性の値は " TCP " または " UDP "ではなく "any" になります。

NAME  GROUP   Profile   Enabled  Action  Override  Program           Local Address   Remote Address   Protocol   Local Port   Remote Port   Allowed Users  Allowed Computers
view          Domain     Yes     Allow    No       c:\test\view.exe    Any               Any            Any         Any         Any             Any            Any

だから、私は2つの質問があります:

  1. 例外が 1 つしか作成されないのはなぜですか? 例外の名前は一意である必要がありますか?
  2. 「Protocol」属性の値が有効にならないのはなぜですか?

ファイアウォール拡張機能に関する公式ドキュメントを参照し ます

すべての受信ポートとプロトコルへのアクセスを許可するファイルの識別子。ファイルを使用する場合、プログラムも使用できません。File と Port または Protocol を同じ FirewallException 要素で使用すると、Windows XP および Windows Server 2003 への例外のインストールに失敗します。IgnoreFailure="yes" を使用すると、結果として生じる失敗を無視できますが、例外は追加されません.

プログラムにファイアウォールルールを設定すると、「プロトコル」を設定しても、「プロトコル」と「ポート」の属性が自動的に「すべて」になるということですか?

4

2 に答える 2

3

既存の wix FirewallException カスタム アクションは、XP/Server2003 Windows ファイアウォール API を利用します。この API では、特定の実行可能ファイルにファイアウォールの例外を設定すると、すべてのポートとすべてのプロトコルが例外に対して開かれることを意味します。

参考までに、XP/Server2003 ファイアウォール API インターフェイス. INetFwOpenPort にはポートを取得/設定する機能がありますが、INetFwAuthorizedApplication にはありません。

プログラムでファイアウォールの例外を作成し、ポート、プロトコル、およびドメインを明示的に制限する場合は、Vista に付属している Windows の「高度な」ファイアウォール API を利用する必要があります。これらのリファレンスを確認してください: 高レベルの概要
リファレンス ガイド
コマンドライン リファレンス ガイド

残念ながら、これらの更新された API を利用する Wix 用の AdvancedFirewallException 拡張機能を実装した人はまだいません。たぶん、キックスターター キャンペーンを実行して、開発への資金提供に関心があるかどうかを確認します ;P

于 2014-09-25T14:45:38.890 に答える
2

FirewallExeption ID ごとに異なる名前を使用してみてください。これは私のために働いた:

<File Id="sample.exe"
              Name="sample.exe"
              Source="..\TestFrame\bin\debug\sample.exe"
              Vital="yes"
              KeyPath='yes'>

          <fire:FirewallException Id="FirewallDomainSampleTcp"
                                  Name="Domain Sample TCP"
                                  Protocol="tcp"
                                  Port="8080"
                                  Scope="any"
                                  IgnoreFailure="yes"
                                  Profile="domain" />

          <fire:FirewallException Id="FirewallDomainSampleUdp"
                                  Name="Domain Sample UDP"
                                  Protocol="udp"
                                  Port="8080"
                                  Scope="any"
                                  IgnoreFailure="yes"
                                  Profile="domain" />

          <fire:FirewallException Id="FirewallPrivatSampleTcp"
                                  Name="Private Sample TCP"
                                  Protocol="tcp"
                                  Port="8080"
                                  Scope="any"
                                  IgnoreFailure="yes"
                                  Profile="private" />

          <fire:FirewallException Id="FirewallPrivateSampleUdp"
                                  Name="Private Sample UDP"
                                  Protocol="udp"
                                  Port="8080"
                                  Scope="any"
                                  IgnoreFailure="yes"
                                  Profile="private" />
        </File>
于 2014-10-30T07:00:34.440 に答える