ネタ元:Windowsアプリのインストールフォルダを知る(Insider.NET 会議室)
Windows Installer には自動修復機能があります。Windows File Protection(Windows Resouce Protection)とは全く異なる仕組みですが、Windows Installer をエンジンとするインストーラでインストールされたソフトの場合、ほぼ100%の確率でこの機能が働く可能性を秘めています。
もちろん、VSのセットアッププロジェクトでも例外なく...
で、これがいつチェックされるのか?ですが...
- インストーラで作成されたショートカットをキックしたとき
- COMオブジェクトを実行しようとしたとき
- 関連付けやDDEなどで実行されたとき
で確認が行われます。
ではどういう条件で自動修復が走るのか?ですが、残念ながら明確なドキュメントは見つけられていません。
経験則で確認される範囲や、起動する条件などはある程度確認できてますけどw
まずはわかりやすい(とはいえ、msiの構成を分かってる人には...ですがw)ところで確認範囲から。
上記3つはいずれも何らかのComponentとして用意されています。どういう単位で用意されるかは、ツールによるのでここでは言及しませんが...
このComponentの所属するFeatureの持つComponentのみ調査対象となります。
Featureに所属するComponentすべてに対し、その Component のキーパスの存在チェックとバージョンチェックが行われ、それがクリアできているかどうかを確認するということが自動修復処理として行われているといえます。
マシンの設定でこの処理を行わないようにするという方法もありますが、この機能自体、デバッグサポート機能なので停止させてはいけないことになっています。
さて、次に実際に修復される場合です。
上記のキーパスがファイルの場合については、確認が取れている範囲では、ファイルがあるかどうか、ファイルがバージョンを持っていればバージョンダウンしていないかの2点の確認が行われていることをチェックしています。
同じバージョンの別バイナリや、より新しいバージョンであれば、修復はされません(どういう手段で更新した場合であろうとも)。
このあたりは、WRPとは異なる部分ですね。
なので、SetupAutherな人は、バージョンにはうるさいんですよw
これがよりどころなんですからwww