2021年12月6日月曜日

WixFirewallExtension 忘備録

Windows Install Wix で Firewall を追加しようとした時に、いろいろ躓いたので忘備録

コマンドラインからでも、以下のようにすればFirewallを制御できるので
netsh advfirewall firewall add rule name="test" dir="in" action="allow" program="c:\Proguram Files\Foo\x.exe" description="test description" enable="yes" profile="any"
カスタム・アクションを定義してやれば、要件はクリアしそうである。
<CustomAction Id="CA_01_BYPASSFIREWALL" ExeCommand='netsh advfirewall firewall add ...' Directory="Foo" Execute="deferred" Impersonate="no" Return="check" />
<CustomAction Id="CA_02_REMOVEFIREWALL" ExeCommand='netsh advfirewall firewall del ...' Directory="Foo" Execute="deferred" Impersonate="no" Return="check" />
<InstallExecuteSequence>
  <Custom Action="CA_02_REMOVEFIREWALL" Before="InstallFinalize">REMOVE="ALL"</Custom>
  <Custom Action="CA_01_BYPASSFIREWALL" Before="InstallFinalize">not (REMOVE="ALL")</Custom>
</InstallExecuteSequence>
上記は試してません

WixFirewallExtension を使用すると、ファイヤーウォールを制御できます。
プロジェクトのソリューション・エクスプローラのReferencesを右クリックして、「参照の追加」を選択し、Program Files\Wix Toolset v3.11\bin\WixFirewallExtension.dll を追加します。
Product.wxsに FirewallExtension の namespace を追加します。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:fw="http://schemas.microsoft.com/wix/FirewallExtension">
x64 のコンポーネントだと FirewallExtension が x86 コンポーネントのため、怒られてしまいます。
そのため、x86 のプログラム・フォルダにFirewallのコンポーネントを追加します。
      <Directory Id="ProgramFilesFolder" Name="ProgramFiles86Folder">
        <!-- Firewall -->
        <Component Id="grpcFirewallException" Guid="2B6866D0-0F1F-4579-84A7-87CDE9F57640" KeyPath="yes">
          <fw:FirewallException Id="anyFirewallException" Program="[INSTALLFOLDER]x.exe" Description="BYPASS:x.exe network port" Name="Foo Firewall Exception" Scope="any" />
        </Component>
      </Directory>
      
      
      ...
      <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
          ...
          <ComponentRef Id="anyFirewallException"/>
        </ComponentGroup>
      </Fragment>
としてやればOKです。

0 件のコメント: