現在のすべてのユーザーセッションを列挙し、それらのセッションIDを取得し、後でどのプロセスがどのセッションで実行されているかを確認する必要があるサービスアプリケーションを作成しています。WTSEnumerateSessions()
APIを使用しているだけでなくWTSQuerySessionInformation()
、セッション固有の情報を取得しています。残念ながら、これらのWTSAPIは非常に信頼性がありません。
ユーザーの高速切り替えがオフになっているWindowsXPマシン、またはドメインに参加しているXPマシンでは、これらのAPIはすぐには利用できません。RPC_S_INVALID_BINDING
Windows XPが起動してサービスが開始されてから数分間、または1702のエラーコードで失敗する可能性があります。
そのような制限を処理する方法を説明する公式のドキュメントは見つかりませんでした。検索エンジンを介して利用できるのは、ターミナルサービスサービスがロードされるのを待つことです。これはもちろん可能ですが、実装するのに大きな苦痛になります。
だから、誰かが次のように答えることができれば私はそれをいただければ幸いです:
- それらのWTSのものよりも信頼性の高い、セッション固有のデータを処理するための代替APIはありますか?ほとんどの場合、マシン上の現在のセッションを確認し、ユーザー名とセッションステータスを取得する必要があります。また、各プロセスのセッションIDを使用してプロセスを列挙します。(GINAまたはログイン画面は、ターミナルサービスがロードされる前に、すべての方法で実行できるため、これが可能であることを私は知っています。)
- Windows Vista / Windows 7マシンのいずれかのバージョンでサービスが起動する前に、 WTSクラスのAPI(、、など)が読み込まれることを100%保証してい
WTSEnumerateSessions()
ますWTSQuerySessionInformation()
かWTSEnumerateProcesses()
?
非常に重要な前および規定に注意してください。