1

ターミナル サーバー (グローバル スペース) で実行されている Windows サービスから、特定のユーザーのターミナル サーバー セッションで Windows アプリケーションを実行しているプロセスを開始できるようにしたいと考えています。

これを行うにはどうすればよいですか?

Scenerio: Windows サービスは起動時に開始します。ユーザーが Terminal Server ユーザー セッションにログインした後、Windows サービスだけが知っているいくつかの基準に基づいて、Windows サービスは Windows アプリケーションを実行しているユーザーのセッションでプロセスを開始しようとします。

例: 「5 分後にシャットダウン」という警告をユーザーに表示したいとします。Windows サービスはこの状態を検出し、警告を表示する Windows アプリを開始する各ユーザー セッションでプロセスを開始します。そして、はい、警告ダイアログを表示する他の方法があることは知っています。これは例です。私たちがやりたいことは、はるかに侵襲的です。

4

3 に答える 3

5

CreateProcessAsUser を使用してこれを行うことができますが、少し手間がかかります。次の手順が基本的に必要な手順であると思います。

また、プロセスを起動した後、適切なハンドル、トークンなどをすべてクリーンアップする必要があります。

于 2009-08-15T01:00:03.870 に答える
1

本当に遅い返信ですが、誰かがこれが役立つと思うかもしれません。

次のコマンドを使用して、 PsExecを使用して、指定されたセッション内のリモート (またはローカル) サーバーでアプリケーションを起動できます。

psexec \\COMPUTER_NAME -i SESSION_ID アプリケーション名

SESSION_IDは、アプリケーションを起動するセッション ID を示します

サーバー上でアクティブなセッションと、どのセッション ID がどのユーザー ログインにマップされているかを知る必要があります。次のスレッドは、この正確な問題の優れたコード サンプルを提供します。

于 2012-07-17T19:33:09.733 に答える
0

返信が遅れますが、上記の回答では、WTSQueryUserTokenがすでにプライマリトークンを返しているため、DuplicateTokenは必要ありません。

于 2009-09-14T20:43:09.197 に答える