0

リモートデスクトップでプログラムを起動する必要があります。このプログラムはウィンドウを開き、ユーザーが操作する必要がありますが、私のアプリケーションは Windows サービスです。

Windows 2008 を使用しています。成功したアプリケーションを作成しましたが、マウス、キーボードで接続するプログラムのみのセッションを起動しましたが、RDP で起動する必要があります。

今、私はこれらの機能を使用しています。

WTSEnumerateSessions (enum all sessions, here I know if RDP)
WTSQueryUserToken (Get user token)
DuplicateTokenEx ( make a primary token)
CreateProcessAsUser (run application with SI.lpDesktop = _T("winsta0\\default"))

ただし、これはコンソールでアプリケーションを実行する場合にのみ成功し、RDP ではなく、キーボード、マウス、モニターに接続します。

とにかく私を助けることができますか?ありがとう。

4

2 に答える 2

3

では、マシンの特定のRDPセッションでGUIアプリケーションを起動しようとしていますか?あなたは、多かれ少なかれ正しい考えを持っていますが、いくつかの部分が欠けているかもしれません。Cassiaライブラリの自動テストについては、ソースのProcessHelperクラスを参照してください。C ++で使用するために、管理対象のクロフトの多くを削除できます。昇格された権限でプロセスを実行する必要がない場合は、GetTokenInformation(... TokenInformationClass.TokenLinkedToken ...)ナンセンスを省略することもできます。このコードは、WindowsXP以降のすべてのバージョンのWindowsでテストされています。

WTSQueryUserTokenを呼び出すには、SE_TCB_NAME特権(LocalSystemアカウントがデフォルトで持っている)が必要であることにも注意してください。

于 2011-05-13T02:38:59.793 に答える
0

わかりました、ありがとうダン・ポート

それは私の問題を解決しました。

問題は権限です。これら 3 つのアクセス許可を構成します。

SetPrivilege(hpToken, SE_ASSIGNPRIMARYTOKEN_NAME, TRUE);
SetPrivilege(hpToken, SE_INCREASE_QUOTA_NAME, TRUE);
SetPrivilege(hpToken, SE_TCB_NAME, TRUE);

注: SetPrivilege 関数は私が作成しました。

そして仕事は順調です。再度、感謝します。

于 2011-05-13T23:36:06.263 に答える