0

ユーザー権限で実行される GUI 部分と、サービスとしてローカル システム権限で実行されるサーバー部分で構成されるアプリケーションを作成しています。GUI 部分は、高い特権 (管理者/ローカル システム) を必要とするいくつかの操作を実行する必要がある場合があります。GUI アプリはサービスにこの操作を実行するように要求でき、サービスはこの操作を実行できます (もちろん、認証と承認の後で)。

ただし、ユーザーのデスクトップのコンテキストで実行されるローカル システム権限でサービスがコマンドを実行できると便利です (ユーザーがコマンドの GUI を操作できるようにするため)。出来ますか?

.NET でのソリューションが望ましいですが、C/C++ でも問題ありません。

4

1 に答える 1

0

昇格されていない GUI プロセスから昇格されたコードを実行するには、次の 4 つの方法があります。

  1. 昇格されたロジックを、昇格を必要とする独自のマニフェストを持つ別の .exe ファイルに移動します。GUI アプリは、CreateProcess()必要に応じてそれを実行するために使用できます。

  2. GUI アプリで動詞またはサードパーティを使用ShellExecute/Ex()して、昇格された新しいプロセスを開始します。別の .exe ファイルを使用することも、同じ .exe ファイルを別のコマンド ライン パラメーターと共に使用することもできますが、問題はありません。"runas"CreateProcessElevated()

  3. 昇格されたロジックを独自の COM オブジェクトに移動すると、GUI アプリはCOM Elevation Monikerを使用して、必要に応じてそのオブジェクトをインスタンス化できます。

  4. GUI アプリをサービスと通信させCreateProcessAsUser()、ユーザーのセッション内で新しいプロセスを実行するために使用できます (別の .exe、または異なるコマンド ライン パラメーターを持つ .same exe のいずれでもかまいません)。を使用してユーザーのトークンを取得WTSQueryUserToken()し、構造体でユーザーのデスクトップを指定しますSTARTUPINFO

于 2013-09-04T20:21:00.980 に答える