インストーラ開発における 指針や注意点

インストーラを作る前に
とっちゃん(高萩 俊行)
Microsoft MVP
Developer Tools – Visual C++ 2005/10~
http://blogs.wankuma.com/tocchann/
わんくま同盟 東京勉強会 #68
アジェンダ
• インストーラ開発における指針や注意点
• MISAOがインストーラに与える特徴
• 午後のお知らせ
わんくま同盟 東京勉強会 #68
インストーラ開発における
指針や注意点
わんくま同盟 東京勉強会 #68
指針と注意点
• インストーラとは?
– アプリを起動できるようにするツールの総称
– 不要になったら簡単に削除できる手段を提供
– 容易な手段で更新できる手段を提供
わんくま同盟 東京勉強会 #68
指針や注意点
• Per Users か Per Machine か
– 兼用インストーラにはしない
• Vista までと Win7 以降の両対応ができない
• 出来るかどうかとやるかどうかは別
– 製品の特長、用途、対象ユーザー層
• 一意に確定させる
• 明確にする
• アップデータの提供形態
– .msp によるパッチ提供を行うか
わんくま同盟 東京勉強会 #68
指針や注意点
• インストーラ利用者の想定
– 誰がインストールするか?
– 製品利用者と一致するか?
• 利用環境の想定
– 会社のマシンか?
– 自宅のマシンか?
– 個人所有か?
– 共用利用か?
わんくま同盟 東京勉強会 #68
指針と注意点
• バージョン管理は厳密に行う
– ファイルバージョン管理に規約を設ける
• dllとexe のそれぞれに明確な規約を設ける
• 開発環境外に公開する時点でバージョンは固定
– そこからの変更は次バージョンを原則とする
– アセンブリバージョンとは分けて管理
• AssemblyVersion
– .NET アプリの厳密名用ローカルルール
• AssemblyFileVersion
– ファイルの新旧確認に使う基本情報
– 管理情報で最も厳格に扱われる
わんくま同盟 東京勉強会 #68
指針や注意点
• 32bit と 64bit(アプリ)
– IA64対応の有無
• 対応することは少ないがないとは言えない
– .exe は Any CPU にしない
– .dll は可能な限り Any CPU にする
• COM サーバーの場合は、Any CPU にしない
– COM(DLL)を参照するかを確認する
• 使う場合は、Any CPU にしない
わんくま同盟 東京勉強会 #68
指針と注意点
• AnyCPU な .exe で問題がない場合
– インストーラは 32bit モードで作成
– インストールチェックする場合はAPIを利用
– レジストリを参照しない
• HKLM\SOFTWARE\Wow6432Node
わんくま同盟 東京勉強会 #68
指針と注意点
• 32bit と 64bit(インストーラ)
– パッケージ形式の確定
• 32/64 統合パッケージ
• 32/64 専用パッケージ
– 統合パッケージ
• 環境を見て適切なコンポーネントを導入
– VersionNT64 プロパティなどで確認
– 専用パッケージ
• 環境ごとにそれぞれ別のものとして用意
– .msi の定義情報はすべて32bit基準
• 64bitは専用の情報を参照
わんくま同盟 東京勉強会 #68
指針と注意点
• UNICODE文字
– WiXのExtensionはUNICODE 非対応
– Windows Installer 自身は対応
– Product@Codepage
• OS的に UNICODE Ready
– Package@SummaryCodepage
• OS的に ANSI Only
– .msi ファイルフォーマットの仕様
わんくま同盟 東京勉強会 #68
指針と注意点
• SystemFolder, WindowsFolder にインス
トールしない
– MS製モジュール以外はインストールしない
– FontsFolder を除く
• 常に Isolated Install を検討
– すべてのモジュールをローカルインストール
• COM も Isolated Install モードを検討
• 関連付けなどのシステム設定は除く
わんくま同盟 東京勉強会 #68
指針と注意点
• Feature(機能)
– 論理的集合としてのグルーピングの仕組み
• 階層はそのまま機能(Function)の細分化
• 依存性がある場合はサブ機能
• 依存性がない場合は同列機能
– カスタムインストールの単位
– Featureの増減はProductCodeを変更
• .msp での提供はできない
わんくま同盟 東京勉強会 #68
指針と注意点
• Component(コンポーネント)
– コンポーネントのルールに従う
• 同一パスは同一コンポーネント
– ComponentId を一致させる
– 製品間でも一致させる
• ComponentIdが違う場合はKeyPathを変える
• 同一コンポーネントはバージョン互換にする
– CompnentId が同じ複数の製品の場合
» 同じ情報を保持する(増減がない)
» MSI 4.5 の共有コンポーネントは利用しない
• ショートカットごとにコンポーネントは1つ
– 同名ショートカットで複数存在させない
わんくま同盟 東京勉強会 #68
指針と注意点
• Componentのベストプラクティス
– 実行可能ファイル(exe/dll)は1つだけ
– キーパスを必ず設定
• 原則としてバージョンを持つファイルを対象
– ヘルプファイルも単一コンポーネント
• インデックスファイルは同じコンポーネント
– レジストリだけの場合は検討しなおす
• キーパスはキー名および値名を固定させる
わんくま同盟 東京勉強会 #68
指針と注意点
• Component のベストプラクティス
– CommonFilesFolder
• 共有ファイルとする
• システムグローバルに登録するCOM
• App Paths を使えるNativeモジュール
– システムフォルダ
• 共有ファイルとする
• 永続とはしない(ICE違反だがやらないこと)
わんくま同盟 東京勉強会 #68
指針と注意点
• 極力自前コードを実行しない
– 自己登録は事前抽出
• 可変情報はプロパティを使う
– 標準の仕組み以外のみ
• シリアル番号チェック
• 特殊なアプリ呼び出し
– 作成ツールの拡張機能を積極利用
• WiXExtension
– IIS/SQL Server/VSなどなど
• ISにも同様の機能がある
わんくま同盟 東京勉強会 #68
指針と注意点
• WiX の2パスコンパイルを積極利用
– 場合分けをうまく活用する
– .wixproj をカスタマイズする
• 条件ビルドやブートストラッパー対応など
– 製品固有情報、共有可能情報の分離
• Component ごとに1ファイルくらいの気持ち
• Feature は製品固有
わんくま同盟 東京勉強会 #68
指針と注意点
• プレースフォルダの積極利用
– Component 情報から固有値を除外
• <Directory Id="TARGETDIR">
<Directory Id="ProgramFilesFolder"
Source="Programs">
<Directory Id=“App" Name=“App">
<Directory Id="INSTALLFOLDER"/>
</Directory>
</Directory>
</Directory>
• とすることで、製品固有値を消す
わんくま同盟 東京勉強会 #68
指針と注意点
• WiXのソースはDLしておく
– Extensionを利用する場合はほぼ必須
• カスタマイズ
• 参考資料
– Src\ext フォルダは必ず展開しておく
わんくま同盟 東京勉強会 #68
MISAOがインストーラに
与える特徴
わんくま同盟 東京勉強会 #68
インストーラに与える特徴
• Addin 機構を使った拡張機能
– カスタムインストール
– アドインインストーラ
• 設定ファイルをEXEと同じ場所に書く
– フォルダごとコピーで複数設定を用意可能
– Per Users インストーラしか作れない
• VB10(.NET 4)で作成
– Client Profile では動かない(Twitter)
• Windows 7 のみ対応
わんくま同盟 東京勉強会 #68
午後のおしらせ
わんくま同盟 東京勉強会 #68
午後のお知らせ
•
•
•
•
MISAO 以外のインストーラ作成もあり
自分で作ることを重視
差分利用可能な作り方
変更に対する柔軟性を維持した作り方
わんくま同盟 東京勉強会 #68