マニフェストとVirtualStore

VC2005Expressだとデフォルトで以下のリンカオプションになる

VC2008Expressだとデフォルトで以下のリンカオプションになる

2008以降のリンカは /MANIFESTがあるとデフォルトでUACのレベルがasInvokerになる。manifestでUACが指定されていればVirtual Storeが働かなくなる。
/MANIFESTUACは2008から追加されたオプション。
/MANIFESTFILEはリンカが出力するファイル。
manifestは実行ファイルのリソース(RT_MANIFEST)に追加される。

ではVSのプロジェクト設定のマニフェストツールとは何か
ビルドログを見るとmt.exeはリンカの後に実行されている。

link.exeが終わった後にmt.exeが実行されており、以下のオプションで実行されていることがわかる。

/manifestで指定されたファイル(.\Release\def2eight.exe.intermediate.manifest)を..\Release\def2eight.exeのRT_MANIFESTに埋め込んでいるんだと思われる。def2eight.exe.intermediate.manifestはリンカがはいたファイル。#1はRT_MANIFEST配下のオーディナル番号だろう。

よくわからないがリンカはリソースにマニフェストを埋め込む機能はなくmt.exeがそれをやっているということか。

最後に自身のプロセスがVirtual Store有効になっているかどうかはプロセスのトークンがTokenVirtualizationEnabledを持っているかでわかる。前にも書いたようにマニフェストでUACレベルを設定していればこれは無効になる。VS2008で作ったアプリはデフォルトで無効になる。VS2005ではUACレベルが設定されていないので有効になる。それ以前のアプリはマニフェストがそもそもないので有効になる。

VC# 2005 2008 express でx86 x64ビルドする

1、ツール→オプションを開く
2、左下の、すべての設定を表示をチェック
3、左でプロジェクトおよびソリューションを選択
4、右でビルド構成の詳細を表示をチェック
5、OKで閉じる
6、ビルド→構成マネージャを開く
7、プラットフォームコラムから新規作成を選択しx86またはx64を選ぶ
565f7014-e7e2-4a44-9cf1-26a4b84488ec