1

QWINSTA.EXEを使用して、ネットワーク上のターミナルサーバーからセッション/ユーザーリストを取得しています(私のコンピューターはWindows 7 Pro、TSはWindows Server 2003です)。この関数の出力をテキストファイルにパイプし、テキストファイルを処理して必要な情報を取得します。もっと良い方法があれば、許して、私の長い曲がりくねったポストをスキップして、正しい方向に私を向けてください。

私の問題は、最初に昇格された特権を持たずにプログラムを実行することさえできShellExecute()ないことです。ShellExecuteEx()昇格されていないコマンドプロンプトに移動すると、ディレクトリリストにEXEが表示されません(非表示の属性も表示されません)。「管理者として実行」コマンドプロンプトを使用すると、問題なく表示/使用できます。いずれにしても、Windowsエクスプローラーから見ることができます。

少し調べてみると、このgemが見つかりましたRunFileAsAdminWait()。QWINSTA.EXEを直接呼び出そうとすると機能しません(エラーメッセージで失敗します:) System Error. Code: 2. The system cannot find the file specified.。すべてをバッチファイルにまとめてバッチファイルで使用すると、正常にRunFileAsAdminWait()機能しているようです。

私は知っていますが、使ったことがありませんWTSEnumerateSessions()。リンクしたばかりのMSDNリンク以外に多くの情報を見つけることができませんでした。DelphiのAPIを使用するための参照コードのまともなチャンクを知っている人はいますか?Delphi2007のWindowsユニットでは使用できません。

質問:

  1. アクセスするために管理者権限を必要とするEXEを実行する別の/より良い方法はありますか?それとも、ここで何が起こっているのでしょうか?

  2. ターミナルサーバーでアクティブなセッションのリストを取得するためのより良い方法はありますか?特に、昇格された特権を必要としないものはありますか?

  3. この方法を使用して行き詰まっている場合、私はそれを「正しい方法」で行っていますか?

あなたが提供できるどんな助けにも感謝します!

4

1 に答える 1

6

の結果をパイプする代わりに、この API の Delphi 変換にQWINSTA.EXE使用する必要があります 。JEDI Windows セキュリティ コード ライブラリ (JWSCL) の一部であるユニットをチェックしてください。あなたのケースでは、TJwTerminalServer.EnumerateSessionsメソッドを使用できます。Remote Desktop Services API FunctionsJwsclTerminalServer

于 2011-11-17T21:28:35.967 に答える