■ 現象
マニフェストファイルに<requestedExecutionLevel>タグを追記した後に、
VS上でビルドしたソースを実行すると、以下のダイアログが表示される。
ダイアログ
操作できませんでした。このアプリケーションのサイド バイサイド構成が正しくないため、
アプリケーションが開始できませんでした。詳細については、アプリケーションのイベントログを
参照するか、コマンドラインツール sxstrace.exe を使用して下さい。
で、素直に、イベントログを見たら、以下のメッセージが表示される。
イベントログ
"XXXX.vshost.exe.Manifest" のアクティブかコンテキストの生成に失敗しました。
マニフェストまたはポリシーファイル "XXXX.vshost.exe.Manifest" 行 XX のエラーです。
マニフェストで複数の requestedPrivileges 要素を使用することはできません。
■ 発生環境
* OS : Win7(XPでは発生しない)
* VS : VS2008 Professional
■ 原因
<requestedExecutionLevel>タグを複数書いていたため。
(以下の「マニフェストファイル / app.manifest」を参照のこと)
■ 解決方法
<requestedExecutionLevel>タグを複数書いていたため。
■ マニフェストファイル / app.manifest
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="">http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /><!-- ★追記したタグ★ -->
<!-- UAC マニフェスト オプション
Windows のユーザー アカウント制御のレベルを変更するには、
requestedExecutionLevel ノードを以下のいずれかで置換します。
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
requestedExecutionLevel ノードを指定すると、ファイルおよびレジストリの仮想化は無効になります。
旧バージョンとの互換性のためにファイルおよびレジストリの仮想化を
使用する場合は、requestedExecutionLevel ノードを削除します。
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" /><!-- ★ここにも書いてある(ここを削除する必要がある)★ -->
</requestedPrivileges>
</security>
・・・以下、略・・・