UAC の昇格は、プロセスの起動時にのみ実行されます。実行を開始したプロセスを昇格 (降格) することはできません。したがって、あなたが試みていることを行うには、別のプロセスが必要です。次のいずれかを実行できます。
最初は昇格されていない.exeを実行し、セットアップ関数を呼び出す必要があるときに新しい昇格プロセスを開始します。昇格されていないプロセスはShellExecute/Ex()
、"runas"
動詞を使用するか、サードパーティのCreateProcessElevated()
実装を使用して、昇格された状態で新しいプロセスを開始できます。
最初に昇格した.exeを実行し、セットアップ関数を呼び出してから、消費者関数を呼び出す必要があるときに、CreateRestrictedToken()
およびを使用して、昇格されていない別のプロセスを開始します。CreateProcessAsUser()
セットアップ関数を COM オブジェクトに移動し、昇格されていない状態で .exe を実行し、セットアップ関数を呼び出す必要があるときに、 COM 昇格モニカーを使用して COM オブジェクトを昇格された状態でインスタンス化します。
#1 と #2 については、管理を容易にするために、すべてのコードを 1 つの .exe ファイルにまとめて、それ自体の新しいコピーを実行し、呼び出す関数を指定してすぐに終了するコマンドライン パラメータを渡すことができます。 .