→ WiX 記事一覧
単に読み書きするだけなら簡単。
どこに書くか、x64 と x86 をまたがるときのどうするか、を考え始めると途端に難しい(まだすっかりわかってはいない)。
ちなみに、特に断りのないリンク先は全部英語。
レジストリに書き込み
<Component Id="RegistryEntries" Guid="PUT-GUID-HERE" Directory="TARGETDIR"> <RegistryKey Root="HKLM" Key="Software\[Manufacturer]\[ProductName]" Action="createAndRemoveOnUninstall"> <RegistryValue Type="string" Name="REGISTORY_NAME" Value="[SOME_PROPERTY]"/> </RegistryKey> </Component>
- RegistryKey@Root には "HKLM" = HKEY_LOCAL_MACHINE を指定
- RegistryKey@Key は "Software\[Manufacturer を指す文字列]"
- RegistryKey@Action は createAndRemoveOnUninstall(アンインストール時に消す)、create(アンインストール時に消さない) などを指定
- 詳細は RegistryKey のリファレンス を
- インストーラから書き込んでもいい(非推奨ではない)パスについては後述
- もちろん Feature にて ComponentRef を指定するのを忘れずに。
レジストリから読み込み
<Property Id="NETFRAMEWORK20"> <RegistrySearch Id="NetFramework20" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" Name="Install" Type="raw" /> </Property>
インストーラが書いていいレジストリ
問題を未然に防止するためにも、Microsoft の推奨する範囲でお行儀良くするのが望ましい。
この手の情報が一箇所にまとまっていれば良いのだけれど。
- 実行時に HKLM (HKEY_LOCAL_MACHINE) への書き込みは行わないようにしてください。
- インストール時に、アプリケーションで HKCU と HKLM に合計 128K を超えるデータを保存してはいけません。
つまり、
- (通常の Per Machine Installations な)アプリケーションのインストール時に、アプリ(ないしベンダー)固有の情報を書き込んで良いのは HKLM のみ。
- ユーザ固有の情報は HKCU に書き込む(HKLM には書けない)が、アプリケーションの実行時に行うべきであり、インストール時はアウト。*1
x86(32bit) と x64 の違い
(まだいろいろ調べ中)
64bit Windows (x64) には WOW64 (Windows on Windows 64) という、64ビット環境で 32ビット(x86)アプリケーションを動かすための仕組みがある。
"Program Files (x86)" とかもその一つ。
レジストリについては、32ビットアプリケーションが HKLM\Software へアクセスした場合、WOW64 によって HKLM\Software\Wow6432Node にリダイレクトされる。
64ビットアプリケーションが HKLM\Software に書き込んだ内容は、(通常の操作の範囲では) x86 アプリからは見えない。
WiX で制御するには下記のように記述する(未検証)。
- レジストリ書き込み
- Component@Win64 に "yes" を指定すると x64 として振る舞う(リダイレクト無し)。デフォルトは "no" (x86 扱い、リダイレクト有り)
- レジストリ読み込み
- RegistrySearch@Win64 に "yes" を指定すると x64 として振る舞う(リダイレクト無し)。デフォルトは "no" (x86 扱い、リダイレクト有り)
たとえ msiexec が x64 で動いていても、インストールするアプリが x64 であっても、x86 のふりをするのがデフォルトであることに注意。
- ちなみにインストーラとは関係ないが、x64 アプリから x86 レジストリにアクセスするには KEY_WOW64_32KEY を、x86 アプリから x64 レジストリにアクセスするには KEY_WOW64_64KEY をアクセスマスクに指定する。詳細は下記参照。
x64 の場合にリダイレクトされる全てのレジストリパスについては "Registry Keys Affected by WOW64" にまとめられている*2が、通常は HKLM\SOFTWARE についてのみ意識しておけば十分だろう。
→ WiX 記事一覧