ユーザー アカウント制御 (UAC: User Account Control) がアプリケーションに与える影響

更新 : 2007 年 11 月

ユーザー アカウント制御 (UAC: User Account Control) は、限られた特権をユーザー アカウントに付与する Windows Vista の機能です。UAC の詳細については、以下のサイトを参照してください。

UAC を有効にした後のプロジェクトのビルド

UAC を無効にした状態で Windows Vista で Visual C++ プロジェクトをビルドし、後で UAC を有効にする場合は、正しく動作させるためにプロジェクトを消去して、ビルドし直す必要があります。

管理者特権を必要とするアプリケーション

既定では、Visual C++ リンカは、実行レベル asInvoker でアプリケーションのマニフェストに UAC フラグメントを組み込みます。正しく実行するためにアプリケーションが管理者特権を必要とする場合 (たとえば、アプリケーションがレジストリの HKLM ノードを変更する場合、または Windows ディレクトリなどのディスクの保護領域に書き込みを行う場合)、アプリケーションを変更する必要があります。

最初の方法は、実行レベルを requireAdministrator に変更するようにマニフェストの UAC フラグメントを変更することです。これにより、アプリケーションは実行前に管理資格情報を求めてユーザーにプロンプトを表示するようになります。この方法については、「/MANIFESTUAC (UAC 情報をマニフェストに組み込む)」を参照してください。

2 番目は、/MANIFESTUAC:NO リンカ オプションを指定してマニフェストに UAC フラグメントを組み込まない方法です。この場合、アプリケーションは仮想実行されます。レジストリまたはファイル システムに変更を加えた場合、その変更はすべてアプリケーションの終了後に失われます。

UAC が有効な場合と無効な場合、またアプリケーションに UAC マニフェストがある場合とない場合のアプリケーションの動作の違いを次のフローチャートで説明します。

Windows Vista ローダーの動作

参照

概念

C++ のセキュリティ推奨事項