山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他インストーラーの作成(Wix3)
概要
自作ソフトを作った場合、インストーラーがほしくなります。ただしVisual C++ 2008 Expressには付属しておりません。
調べてみるとMicrosoftよりフリーのWixというソフトが発表されていました。これはxml形式のファイルよりWindows Insta;;er 用のmsi形式のファイルを作成できます。ためしに使ってみました。
Wix3のインストール
http://sourceforge.net/projects/wix/files/ より
WiX v3.0 (stable)をクリックして、次に3.0.5419.0 RTMをクリックします。
wix3.0.5419.0-x86-setup.zip とwix3.0.5419.0-sources.zip をダウンロードします。
wix3.0.5419.0-x86-setup.zip を解凍しmsiファイルをダブルクリックしてwix3をインストールします。
wix3.0.5419.0-sources.zipを解凍しその中からext\UIExtension\wixlibの中のWixUI_ja-jp.wxl(日本語の表示にするために必要)をC:\Program Files\Windows Installer XML v3\binにコピーします。メッセージを日本語で表示するのに必要となります。
インストーラのサンプル
1個のファイルをインストールするインストーラーの作成(Wix3) 64bitアプリ
2個のファイルをインストールするインストーラーの作成(Wix3)
2個のファイルをインストールするインストーラーの作成(Wix3) フォルダ作成
2個のファイルをインストールするインストーラーの作成(Wix3) 2階層のフォルダ作成
1個のファイルをインストールするインストーラーの作成(Wix3) Visual C++ 2008再配布パッケージを含む
標準的なインストーラーの作成
下図のようなインストーラーを作ってみました。
仕様は、下記のとおりとする。
著作権表示ができる。
インストールフォルダを変更できる。
Visual C++ 2008 Expressで作成された実行ファイル(MFC等を使用しないAPIレベル)を対象としラインタイムファイルをインストールできる。
アンインストールがコントロールパネルより実行できる。
ショットカットの作成ができる。
フォルダー構成
下記のようにファイルを配置します。
mysoft.exe ←インストールするソフト
License.rtf
setup.wxs
ソースコード(setup.wxs)
メモ帳等に下記のソースをコピーします。
<?xml version="1.0" encoding="UTF-8"?> <!-- インストーラー (Visual C++ 2008 Express用) インストールフォルダーの変更・ショートカットの登録・アンインストール情報の設定 ランタイムパッケージの登録(Visual C++ 2008用) をサポート --> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <!-- UpgradeCode:アップグレー時に必要なcode(guidegen.exe等で作成) Version:インストールするアプリケーションのバージョン Language:1041 日本語 CodePage:932 日本 Name:*.msiファイルの表題やコントロールパネルのアプリケーションの削除等に表示される名前 Manufacturer:*.msiファイルの作成者に表示される名前 EmbedCab:yseにすると*.msiファイルにインストールすべき全ファイルが結合される noにすると*.msiファイルとCabinetで指定されるcabファイルが作成される --> <Product Id="*" UpgradeCode="" Version="1.0.0.0" Language="1041" Codepage="932 " Name="" Manufacturer=""> <Package InstallerVersion="300" Languages="1041" SummaryCodepage="932" Compressed="yes"/> <Media Id="1" Cabinet="myapplication.cab" EmbedCab="yes" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <!-- Name:program filesの下のフォルダー名を指定 --> <Directory Id="APPLICATIONROOTDIRECTORY" Name=""/> </Directory> <!-- Name:スタートメニュー プログラム下のフォルダー名を指定--> <Directory Id="ProgramMenuFolder"> <Directory Id="ApplicationProgramsFolder" Name=""/> </Directory> <!-- マージモジュール 実行に必要なランタイムファイルを指定 --> <Directory Id="SystemFolder" SourceName="System" LongSource="System32"> <Merge Id="VC90CRTx86.msm" Language="0" DiskId="1" SourceFile="$(env.CommonProgramFiles)\Merge Modules\Microsoft_VC90_CRT_x86.msm"/> </Directory> </Directory> <DirectoryRef Id="APPLICATIONROOTDIRECTORY"> <!-- Guid:アンインストール用時に使われるGUID値(guidgen.exe等で作成) --> <Component Id="mysoft.exe" Guid=""> <!-- Source:コピー元のファイル名 ほかに必要なファイルがあれば<File Id= />を繰り返す --> <File Id="mysoft.exe" Source="mysoft.exe" KeyPath="yes" Checksum="yes"/> </Component> </DirectoryRef> <DirectoryRef Id="ApplicationProgramsFolder"> <!-- Guid:アンインストール用時に使われるGUID値(guidgen.exe等で作成) --> <!-- Name:ショートカット名 Description:ショートカットのコメント --> <!-- Target:ショートカットにする元のファイル名 --> <Component Id="ApplicationShortcut" Guid=""> <Shortcut Id="ApplicationStartMenuShortcut" Name="" Description="" Target="[APPLICATIONROOTDIRECTORY]mysoft.exe" WorkingDirectory="APPLICATIONROOTDIRECTORY"/> <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/> <!-- アンインストールに必要なレジストリ登録 makerに作者名 softnameにソフト名 --> <RegistryValue Root="HKCU" Key="Software\\" Name="installed" Type="integer" Value="1" KeyPath="yes"/> </Component> </DirectoryRef> <Feature Id="MainApplication" Title="Main Application" Level="1"> <ComponentRef Id="mysoft.exe" /> <ComponentRef Id="ApplicationShortcut" /> <MergeRef Id="VC90CRTx86.msm"/> </Feature> <!-- 変更:InstallDir UI--> <!-- インストールフォルダーを変更できるようにする 上記のDirectory IdとValueと同じ名前でなければならない--> <UIRef Id="WixUI_InstallDir" /> <Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONROOTDIRECTORY" /> <!-- ライセンス条項の内容を定義 --> <WixVariable Id="WixUILicenseRtf" Value="LICENSE.rtf"/> <!-- 変更:InstallDir UI--> </Product> </Wix>
GUID値を設定
上記ソースコード中の , , に世界で唯一であるユニークな値を設定します。この値は、guidgen.exeで作成できます。
guidgen.exeはVisual C++ 2008がインストールされているとC:\Program Files\Microsoft Visual Studio 9.0\Common7\Toolsにあります。
一度、program files内でguidgen.exeを検索してみてください。
なければ、googleなどでguidgen.exeを検索してみてください。microsoftのサイト内にあるようです。FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFFのような並びの値が作成されます。
ソフト名等の設定
上記ソースからmsiファイルを作成するとプロパティとスタートメニューは下図のようになります。
変更するには、下表の色つきのところをメモ帳などで置き換えれば任意にできます。
内容 | 上記ソースコード |
登録するアプリケーションファイル(ショートカットのターゲットファイル) | mysoft.exe |
表題 | |
作成者 | |
program files内に作成されるフォルダー名 | |
スタートメニュー プログラムの中に作成するフォルダー名(all userに作成される) | |
ショートカット名 | |
ショートカットのコメント | |
レジストリに登録する作成者 | |
レジストリに登録するソフト名 |
複数のファイルをインストールする場合は、
<File Id="mysoft.exe" Source="mysoft.exe" KeyPath="yes" Checksum="yes"/>
<File Id="mysoft2.exe" Source="mysoft2.exe" KeyPath="yes" Checksum="yes"/>
のように<File Id を繰り返します。
ソースファイルの保存
setup.wxs という名前で保存します。(setup.wxs.txt ではありません)
msiファイルに変換
コマンドラインベースのcandle.exe , light.exeを使います。この2つのファイルは、C:\Program Files\Windows Installer XML v3\binにあります。
スタートメニューでコマンドプロンプトを実行してもこれらへのパスが通っていないのでフルパスで指定しなければならないので面倒です。
下記のようなバッチファイルをソースファイルと同じフォルダーに作成しておくと、エクスプローラー上からバッチファイルをダブりクリックすることによりパスの登録及びコマンドプロンプトをソースファイルのフォルダーをカレントにして実行できます。下記の場合d:\setupの中にソースファイルを置いております。
PATH=%ProgramFiles%\Windows Installer XML v3\bin;%path% cmd
上記のソースをメモ帳にコピーし setwix.bat という名前でd:\setup内に保存します。
エクスプローラでsetwix.batをダブルクリックします。
msiファイルの変換はコマンドプロンプトで下記のように入力します。
candle setup.wxs light -ext WixUIExtension -loc "C:\Program Files\Windows Installer XML v3\bin\WixUI_ja-jp.wxl" setup.wixobj
上記のように毎回入力するのが煩雑ですのでこれもバッチファイルを作っておくとよいでしょう。サンプルを下記に示します。c:\はwixのインストール先にあわせて変更してください。
candle %1.wxs if errorlevel 1 goto end light -ext WixUIExtension -loc "c:\Program Files\Windows Installer XML v3\bin\WixUI_ja-jp.wxl" %1.wixobj :end
バッチファイル名をw.batとすると実行は、 wix setup と入力します。
ちなみにたくさんエラーが出ると思いますが、microsoft公認です。
http://cml.s10.xrea.com/ej/WiX/install_vcredist.htm
日本語化する
上記のlight実行時に -loc "c:\Program Files\Windows Installer XML v3\bin\WixUI_ja-jp.wxl" を指定しないと、下図のように英語のメッセージになってしまいます。意外とweb上に情報がなかったので記載しております。ダイアログボックスのメッセージはこのファイルを修正すると変更できます。
標準の画像を変更する
下図の用に自分の用意した画像を変更できます。
最初と最後のページの変更
</Product の行の上に下記の行を追加します。welcome.bmp が画像ファイルで493*312ピクセルのサイズとします。この画像はダイアログボックスのほぼ全体を占めます。中央から右に掛けてメッセージが表示されますので、背景を白等明るくする必要があります。ちなみに小さいサイズの画面を用意すると自動的に拡大されます。この例ではお城の横幅を170ピクセルにしています。
<WixVariable Id="WixUIDialogBmp" Value="welcome.bmp" />
途中の画像の変更(上部バーナー)
</Product の行の上に下記の行を追加します。Banner.bmp が画像ファイルで493*58ピクセルのサイズとします。この画像はダイアログボックスのほぼ横幅全体を占めます。左側から中央に掛けてメッセージが黒字で表示されますので、背景を白等明るくする必要があります。ちなみに小さいサイズの画面を用意すると自動的に拡大されます。この例ではお城の横幅を約60ピクセルにしています。
<WixVariable Id="WixUIBannerBmp" Value="Banner.bmp" />