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

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

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

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

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

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

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

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

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

Flowchart of Windows Loader behavior.

関連項目

セキュリティ推奨事項