CustomScript

2014年12月6日土曜日

WPF勉強(11) アプリ配布方法について WiX編

  • VS2013
  • WiX3.9
WiXでインストーラを作成してみました。

Windows Installer XML toolset(ウィックス)は、XML ドキュメントから Windows Installer (MSI) パッケージを作成するためのフリーソフトウェアのツールセットである。WiX はコマンドラインベースの環境をサポートしている。(by Wikipedia)

WiXについては下記ページを参照してください。

WiX Toolset (公式)
http://wixtoolset.org/
WiXチュートリアル(日本語訳)
http://wix.softark.net/

今回はVisualStudioでWiXを使ってみます。 そこそこの見栄えにするため、チュートリアルの2.4ぐらいまで進めていることを前提にします。

チュートリアルはコマンドラインですが、標準ではパスが通っていません。下記のようなバッチを作ってそこから作業すると良いでしょう。
@set Path=%Path%;C:\Program Files (x86)\WiX Toolset v3.9\bin
@start /b

WiXをインストールするとVisualStudioでWiXのプロジェクトが作れるようになります。
次のムービーを参考に最小のWiXプロジェクトを作ってみてください。



私は英語がわかりませんが、操作を見ていればなんとなくわかります。映像は偉大です。
チュートリアルとWiXの構造が違うように見えますが、<Fragment>で要素が外に置かれているだけです。新しい要素としては、<MajorUpgrade>はアップグレードの簡易設定用で、<MediaTemplate>は<Media>に替わるもの?です。

で、実際に自分のプロジェクトでやってみたときのWiXコードがこれです。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

  <Product Id="*" Name="テストアプリ" Language="1041" Codepage="932" Version="1.0.0.0" Manufacturer="テストアプリ製作所" UpgradeCode="YOURGUID-6dddd4f9-12ba-476a-92bb-92f4460670cf">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate EmbedCab="yes"  />

    <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentGroupRef Id="ProgramMenuComponents" />
    </Feature>

    <UIRef Id="WixUI_Minimal" />
    
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="テストアプリ" />
      </Directory>
      <Directory Id="ProgramMenuFolder">
        <Directory Id="MyMenuFolder" Name="テストアプリ" />
      </Directory>
    </Directory>
 </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <Component Guid="*">
        <File Source="$(var.WpfApplication1.TargetPath)" KeyPath="yes">
          <Shortcut Id="ShortcutMyMenu" Directory="MyMenuFolder" Name="テストアプリ" WorkingDirectory="INSTALLDIR" Icon="MyIcon.exe" IconIndex="0" Advertise="yes"/>
        </File>
        <File Source="$(var.WpfApplication1.TargetPath).config" />
      </Component>
    </ComponentGroup>

    <ComponentGroup Id="ProgramMenuComponents" Directory="MyMenuFolder">
      <Component Guid="*">
        <RemoveFolder Id="MyMenuFolder" On="uninstall"/>
        <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type ="string" Value="" KeyPath="yes" />
      </Component>
    </ComponentGroup>

    <Icon Id="MyIcon.exe" SourceFile="$(var.WpfApplication1.TargetPath)" />
    
  </Fragment>

</Wix>

.exeと一緒に.exe.configもインストールするようにしています。WPFアプリの静的な設定ファイルみたいなもの?なので、セットにしておくと良いようです。

スタートメニューから起動できるようにショートカットを作るようにしています。

ちょっと豪華なUIにするためにWiXUIを使っています。チュートリアルではコマンドラインで "-ext WixUIExtension" オプションを追加していましたが、VisualStudioのプロジェクトでは参照(References)でWixUIExtension.dllを追加します。日本語設定も必要なので、プロジェクトのプロパティの[Build]の Cultures to build: に "ja-JP" を記述しています。


0 件のコメント:

コメントを投稿