山本ワールド
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 その他2個のファイルをインストールするインストーラーの作成(Wix3) 2階層のフォルダ作成
概要
32bitのプログラムであるtest3.exeをProgram Filesフォルダー{64bit版のWindowsの場合Program Files(x86)}に更にhtmlフォルダを作成しその中にLICENSE.rtfをインストールするサンプルです。さらにhtmlフォルダーの中にchildフォルダーを作成しLICENSE.rtfをコピーします。インストール先は任意に変更できます。コントロールパネルでアンインストールができます。あらかじめWix3(wix3.0)をインストールしておく必要があります。ファイル1個の場合との違いは名称以外では、<Directory Id=でhtmlフォルダの定義を行っていること、<DirectoryRef ID=及び<Componentでhtmlフォルダをコンポネント扱いとし<File IDでコピーを指定していること、<ComponentRefでインストールする対象としてhtmlを指定していることです。フォルダーごとにコンポネント化しているところが味噌です。wxsソース上の841F8AF7-7A9A-470e-8008-E2223621EAD6等については世界で任意の値でなければならないのでこのインストーラをもとに配布プログラムを作る場合はguidgen.exe等で再度任意のGUID値を得なければなりません。
仕様
標準インストール先
C:\Program Files\test4 │ test4.exe │ └─html │ LICENSE.rtf │ └─child LICENSE.rtf
ショートカット スタートメニューのテストメニュー内に作成
インストーラーのソース等のダウンロード
スクリーンショット
インストーラー
メニューの登録状況
サンプルプログラムの実行画面
コントロールパネルでの登録状況
アンインストール
インストーラーのもととなるデータフォルダの内容(ダウンロードしたファイルを解凍した場合)
LICENSE.rtf ←ライセンスの内容を表すリッチテキストファイル
test3.exe ←インストールされる実行ファイル
test3.wxs ←インストール手順等が書かれたwix用のソースファイル
test3.msi ←作成されたインストーラー このファイルのみ配布すれば良い
w.bat ← msiファイル作成用のバッチファイル
test2.wxs
<?xml version="1.0" encoding="UTF-8"?>
<!-- インストーラー (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="FAF2DE44-80D8-48f0-847B-7FDF1EB44BA3" Version="1.0.0.0"
Language="1041" Codepage="932 " Name="テスト4" Manufacturer="作成者">
<Package InstallerVersion="300" Languages="1041" SummaryCodepage="932" Compressed="yes"/>
<Media Id="1" Cabinet="myapplication.cab" EmbedCab="yes" />
<Property Id="ALLUSERS" Value="1" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<!-- Name:program filesの下のフォルダー名を指定 -->
<Directory Id="APPLICATIONROOTDIRECTORY" Name="test4">
<Directory Id="html_dir" Name="html">
<Directory Id="child_dir" Name="child"/>
</Directory>
</Directory>
</Directory>
<!-- Name:スタートメニュー プログラム下のフォルダー名を指定-->
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="テストメニュー"/>
</Directory>
<!-- マージモジュール 実行に必要なランタイムファイルを指定 -->
</Directory>
<DirectoryRef Id="APPLICATIONROOTDIRECTORY">
<!-- Guid:アンインストール用時に使われるGUID値(guidgen.exe等で作成) -->
<Component Id="mysoft.exe" Guid="12784251-52F9-482c-B143-6A4CA64BF502">
<!-- Source:コピー元のファイル名 ほかに必要なファイルがあれば<File Id= />を繰り返す -->
<File Id="test4.exe" Source="test4.exe" KeyPath="yes" Checksum="yes"/>
</Component>
</DirectoryRef>
<DirectoryRef Id="html_dir">
<!-- Guid:アンインストール用時に使われるGUID値(guidgen.exe等で作成) -->
<Component Id="html" Guid="12784251-52F9-482c-B143-6A4CA64BF503">
<!-- Source:コピー元のファイル名 ほかに必要なファイルがあれば<File Id= />を繰り返す -->
<File Id="LICENSE" Name="LICENSE.rtf" Source="LICENSE.rtf" Checksum="yes"/>
</Component>
</DirectoryRef>
<DirectoryRef Id="child_dir">
<Component Id="child" Guid="12784251-52F9-482c-B143-6A4CA64BF504">
<File Id="LICENSE2" Name="LICENSE.rtf" Source="LICENSE.rtf" Checksum="yes"/>
</Component>
</DirectoryRef>
<DirectoryRef Id="ApplicationProgramsFolder">
<!-- Guid:アンインストール用時に使われるGUID値(guidgen.exe等で作成) -->
<!-- Name:ショートカット名 Description:ショートカットのコメント -->
<!-- Target:ショートカットにする元のファイル名 -->
<Component Id="ApplicationShortcut" Guid="2C621873-FEDC-4e56-91C1-7D5C6A1365AC">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="テスト4"
Description="テスト"
Target="[APPLICATIONROOTDIRECTORY]test4.exe"
WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
<RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
<!-- アンインストールに必要なレジストリ登録 makerに作者名 softnameにソフト名 -->
<RegistryValue Root="HKCU" Key="Software\maker\softname" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
<Feature Id="MainApplication" Title="Main Application" Level="1">
<ComponentRef Id="mysoft.exe" />
<ComponentRef Id="html" />
<ComponentRef Id="child" />
<ComponentRef Id="ApplicationShortcut" />
</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>
w.bat
w.batを実行するとmsiファイルが作成される。
echo 32bit版
pause
set src=test4
if defined ProgramFiles(x86) goto WOW64
set pro=%ProgramFiles%
echo Windowsは32bit版です
goto end_path
:WOW64
set pro=%ProgramFiles(x86)%
echo Windowsは64bit版です
:end_path
"%pro%\Windows Installer XML v3\bin\candle" %src%.wxs
if errorlevel 1 goto end
"%pro%\Windows Installer XML v3\bin\light" -ext WixUIExtension -loc "%pro%\Windows Installer XML v3\bin\WixUI_ja-jp.wxl" %src%.wixobj
:end
set pro=
set src=
pause