Windows Installer
$ ls -al /usr/local/bin total 260 drwxr-x---+ 2 smnb Users 0 Oct 17 13:49 . drwxr-x---+ 5 smnb Users 0 Mar 10 2007 .. lrwxrwxrwx 1 smnb None 70 Oct 17 13:49 WIX -> /cygdrive/c/Users/smnb/Downloads/Microsoft/WIX/wix-2.0.5325.0-binaries -rwxr-xr-x 1 smnb None 234314 Mar 12 2007 nkf.exe
$ which candle /usr/local/bin/WIX/candle smnb@vista WSDK ~/myprog/wix/codezine/0001_first_msi $ which light /usr/local/bin/WIX/light
Windows Installer XML(WiX) toolset
TARGET=readme_txt
RESOURCE_DIR=resource
TARGET_DIR=/cygdrive/c/Program\ Files/smnb
.PHONY: all test mmm clean uninstall install
.SUFFIXES: .msi .wixobj .wxs
all:$(TARGET).msi
$(TARGET).msi: $(TARGET).wixobj $(RESOURCE_DIR)/*
$(TARGET).wixobj: $(TARGET).wxs
.wixobj.msi:
light $<
.wxs.wixobj:
candle $<
@echo
test:
cygstart ./$(TARGET).msi
ls -al $(TARGET_DIR)/ReadMe
install: test
uninstall:
control appwiz.cpl
clean:
@-rm $(TARGET).msi 1>/dev/null 2>&1
@-rm $(TARGET).wixobj 1>/dev/null 2>&1
@-rm *~ 1>/dev/null 2>&1
mmm:
cat makefile
cat $(TARGET).wxs
pwd
make clean
ls -al resource
ProductCode Property
GUIDを生成するツールとして、Microsoft Windows SDKに付属するGuidGenなどがある。
cat makefile
.PHONY: test clean mmm
TARGET=guid_gen
test:
cscript $(TARGET).js
clean:
-rm*~ 1>/dev/null 2>&1
mmm:
cat makefile
cat $(TARGET).js
cat guid_gen.js
// Generate GUID
//var TypeLib = CreateObject("Scriptlet.TypeLib");
var TypeLib = new ActiveXObject("Scriptlet.Typelib");
WScript.Echo(TypeLib.Guid);
{B693E257-C4FB-4FED-831C-85A2E1473642}
readme.txt sample
<?xml version="1.0" encoding="UTF-8"?>
<!-- readme_txt.wxs -->
<Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
<Product
Id="12345678-1234-1234-1234-123456789012" Name="ReadMe_txt"
Version="1.00.0000" Manufacturer="smnb"
Language="1041" Codepage="932">
<Package Id="????????-????-????-????-????????????"
Description="SampleReadMe_txt"
Comments="Database for ReadMe_txt" InstallerVersion="200"
Platforms="Intel" Manufacturer="smnb"
Keywords="Installer,MSI,Database" Languages="1041"
SummaryCodepage="932"/>
<Media Id="1" Cabinet="Product.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="smnb" Name="smnb">
<Directory Id="INSTALLLOCATION" Name="ReadMe">
<Component Id="Component1"
Guid="960E5941-FE2A-4384-A96F-8AED231DB301">
<File Id="File1" Name="Readme.txt" KeyPath="yes"
Compressed="yes" DiskId="1" Source="resource\Readme.txt"/>
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
<Feature Id="Feature1" Level="1">
<ComponentRef Id="Component1" />
</Feature>
</Product>
</Wix>
Product Attributes
| Attributes | Meaning | Mandatory | Property | Memo |
|---|---|---|---|---|
| Id | ProductCode GUID | Yes | ProductCode | B693E257-C4FB-4FED-831C-85A2E1473642 |
| Codepage | インストーラ内部データのコードページ | 日本語:932 | ||
| Language | インストーラ対応言語 | Yes | ProductLanguage | 日本語:1041 |
| Manufacturer | 開発元 | Yes | Manufacturer | |
| Name | 製品表示名 | Yes | ProductName | 63 characters in length |
| UpgradeCode | 製品群識別GUID | Recommended | UpgradeCode | |
| Version | 製品バージョン | Yes | ProductVersion | major.minor.build (255.255.65535) |
Package attributes
| Attributes | Meaning | Mandatory | Property | Memo |
|---|---|---|---|---|
| Id | ファイルの識別子となるGUIDを指定 | Yes | PackageCode | 自動生成??? |
| Comments | コメント | Recommended | ||
| Compressed | デフォルトで圧縮を指定 | ファイル単位優先 | 省略した場合はno | |
| Description | ファイルの説明 | |||
| InstallerVersion | インストーラの実行に必要となるランタイムバージョンを指定 | 200 で 9x系以降 | ||
| InstallPrivileges | UAC設定 | 省略は、elevated | ||
| Keywords | 検索キーワード | Installer,MSI,Database | ||
| Languages | サマリーの言語を指定 | 1041 | ||
| Manufacturer | 開発元 | |||
| Platforms | 対象のプラットフォーム | 32bitアプリケーションの場合は、Intelを指定 | ||
| ShortNames | ファイルのパスをショートパスで扱う | 通常省略 | use long name | |
| SummaryCodepage | コードページ | 932 | ||
| CPU | 32/64 | Value |
|---|---|---|
| x86 | 32 | Intel |
| Alpha | 32 | Alpha |
| AMD64/EM64T | 64 | x64 |
| IA-64 | 64 | Intel64 |
Media Element
| Attributes | Meaning | Mandatory | Property | Memo |
|---|---|---|---|---|
| Id | メディアテーブルのDiskIdに相当するプライマリフィールド | Yes | 値は1以上の数値 | |
| Cabinet | 圧縮ファイル名 | 圧縮する場合 | Cabinet形式 | |
| CompressionLevel | 圧縮レベル | 圧縮する場合 | 省略は、デフォルト設定の"mszip" | |
| EmbedCab | 圧縮ファイルをmsiに埋め込む | |||
| DiskPrompt | CD/DVDで配布を行なう場合の、ディスクメディアの表示名 | DiskPrompt | "[1]"を指定した場合、この内容をそのまま | |
| VolumeLabel | CD/DVDで配布を行なう場合の、ディスクメディアのボリュームラベル | Windows Installer自身が参照 |
Directory attributes
| Attributes | Meaning | Mandatory | Property | Memo |
|---|---|---|---|---|
| Id | ディレクトリエントリーの識別子 | Yes | ||
| Name | インストール先のフォルダ名 | Yes | ショートネームで収まらない場合は、この値がショートネーム名となります。 | |
| LongName | インストール先フォルダの長い名前 |
Package要素のShortNamesがyesの場合利用されない。 |
||
| SourceName | ソースメディア上のフォルダ名(圧縮しない場合) | ショートネームで収まらない場合は、この値がショートネーム名となります。 | ||
| LongSource | ソースメディア上の長い名前 |
Package要素のShortNamesがyesの場合利用されません。 |
Component Element
| Attributes | Meaning | Mandatory | Property | Memo |
|---|---|---|---|---|
| Id | コンポーネントの識別子 | Yes | プライマリキー/内部識別子 | |
| Guid | コンポーネントの外部識別子 | Yes | コンポーネントごとにユニークな値設定。自動生成不可。 | |
| KeyPath | コンポーネントのキーパス | 通常は省略 | コンポーネントのキーパスをインストール先フォルダにする場合に指定 | |
| SharedDllRefCount | 共有ファイルとしてインストール |
File Element
| Attributes | Meaning | Mandatory | Property | Memo |
|---|---|---|---|---|
| Id | ファイルの内部識別子 | Yes | ||
| Name | ファイル名 | Yes | ||
| LongName | 長いファイル名 | |||
| DiskId | Mediaのディスク番号 | |||
| KeyPath | コンポーネントのキーパス | コンポーネント内で一つだけyesとすることができる。省略はnoと同じ | ||
| Compressed | 圧縮指定 |
省略で、Package要素の指定に準ずる |
||
| Source | インストール対象ファイルのパスを指定 | ビルド時に参照する |
Feature Element
| Attributes | Meaning | Mandatory | Property | Memo |
|---|---|---|---|---|
| Id | Featureの内部識別子 | Yes | ||
| Level | デフォルトのインストールレベル | Yes | 必ずインストールする場合は1を指定。0を指定するとインストール対象から除外 | |
| Display | Featureの表示方法指定 | collapse(展開せずに表示)/expand(展開して表示)/hidden(非表示) | ||
| Title | カスタムインストールのツリーで表示する名称 | 非表示またはカスタムインストールを行なわない場合は省略 | ||
| Description | 詳細説明文 | 非表示またはカスタムインストールを行なわない場合は省略 | ||
| ConfigurableDirectory | インストール先のカスタマイズを行なう際のターゲットとなるインストール先のディレクトリエントリを指定 | |||
| AllowAdvertize | アドバタイズインストールを行なえるかを指定 | |||
| InstallDefault | デフォルトのインストール条件を指定 |
ComponentRef Element
| Attributes | Meaning | Mandatory | Property | Memo |
|---|---|---|---|---|
| Id |
ComponentのIdを指定 |
Yes | ||
| Primary |
複数のFeatureに所属する場合のプライマリかどうかを指定。 |
所属が一つの場合は、所属するFeatuereがプライマリになるため省略可能 |