Windows Installer 5.0(Windows 7以上のOSに搭載)から、MsiShortcutProperty Table というショートカットのプロパティを設定するためのテーブルが追加されています。WiX を使ってる場合は ShortcutProperty Element です。
この機能そのものは、ショートカットに アプリケーションID を関連付け、ジャンプリストや最近使ったファイルなどをアプリケーションと一緒にスタートメニューでも反映できるようにWindows7で追加された機能です(最近使ったファイルの関連付けは、OS側でもやっているため、Vistaからできている)。
他にもいくつか設定できるプロパティがあるのですが、この一つに Windows 8 のスタート画面にショートカットをPIN止めするかというフラグがあります。
いや、このフラグずーっと前から探してたんですが全然見つけられなかったんですよね。この間も自分のローカルなMSDNライブラリを探していて、そこにはそれっぽいのが見つからず、Facebook で愚痴っていたら、biac さんが、それっぽいやつとヒントをくれました。
こいつの最後のほうに、System.AppUserModel.StartPinOption プロパティでスタート画面へのピン止め設定ができるよと。。。本気でさりげなく書かれています。検索で探せてませんでした。
具体的には
<Component Id="SubApp.exe" ...>
<File Source="$(var.SubApp.TargetPath)" KeyPath="yes"/>
<Shortcut Id="SubApp.exe" ...>
<ShortcutProperty Id="SubApp.StartPinOption" Key="System.AppUserModel.StartPinOption" Value="1"/>
</Shortcut>
</Component>
という感じで設定します。
これで、初めてインストール(本当に初めて)した時にこの設定が反映され、非表示としているものはスタート画面には出てこなくなります。
ただし、注意点が一つだけ。
スタート画面の設定は「ユーザーごとに保存」されています。インストール後、スタート画面を開いた時点でスタート画面へのピン止め設定がユーザーごとに別の情報として格納されます。
なので、いっぱいあるからあとから消すことにした!として、インストーラを書き換えても反映されません(昨日それで一日つぶした...orz)。
なので、一番最初にショートカットを用意するインストーラの時点からこの部分にぶれのでないような設計をしておく必要があります。
特に注意が必要なのは上書きインストールによるバージョンアップ。ショートカットの名前が同じなら入れ替えても変わらないので、そのまま引っ張り続けてしまいます。