私は、UAC 開発ガイドで「管理選択アプリケーション」と呼ばれるものを持っています。これが何であるかに精通している場合は、次のセクションにスキップしてください。
バックグラウンド:
「標準」ユーザーが、アプリケーションの設定で [起動時に実行] オプションを選択または選択解除できるようにしたいと考えています。
私のアプリケーションはマシンごと (ユーザーごとではありません) であるため、ショートカット ファイルを削除するか、スタート メニュー/プログラム/スタートアップ フォルダーにコピーする必要があります。これには、この操作を実行するための管理者アクセスが必要です。
したがって、「ユーザー アカウント制御資格情報プロンプト」が表示され、ユーザーが管理者アカウントを持っている場合は、資格情報を入力することもできます。これは明らかに、ユーザーが何か管理を行う必要があるたびに別のアカウントに切り替える必要がないようにアプリケーションを設計する方法です。
MSDN ドキュメントからの抜粋:
管理選択アプリケーション
昇格されたプロセスまたは COM オブジェクト
最初のアプリケーションは、昇格を必要とせずに起動します。管理者アクセス トークンを必要とするユーザー インターフェイスのアイテムは、識別として盾のアイコンで装飾されています。この装飾は、その機能を使用するには管理者の承認が必要であることをユーザーに示します。これらのボタンのいずれかが選択されたことをアプリケーションが検出すると、次の 2 つの選択肢があります。
- アプリケーションは、ShellExecute() を使用して 2 番目のプログラムを起動し、管理タスクを実行します。この 2 番目のプログラムは、requireAdministrator の requestedExecutionLevel でマークされるため、ユーザーは承認を求められます。この 2 番目のプログラムは、完全な管理アクセス トークンで実行され、目的のタスクを実行できます。-また-
- アプリケーションは、CreateElevatedComObject() を使用して COM オブジェクトを起動します。この API は、承認後に完全な管理アクセス トークンを使用して COM オブジェクトを起動し、この COM オブジェクトは目的のタスクを実行できるようになります。
ファイルをコピーする必要があるだけです... ShellExecute() を使用して新しいプロセスをフォークするには過剰に思えます。COM を使用してファイルをコピーできるかどうかを知るには、COM について十分に知りません。ファイルをコピーする方法を提供し、理想的には「シールドデコレータ」でMenuItemを装飾する方法も説明するコードを誰かが投稿できることを願っています。
ノート:
アクセス許可に関連するトピックに関する(パスが保護されている場合は、Windows Vista UAC の昇格を要求しますか? コードには、別のプロセスを呼び出す例のみが含まれています。