2011-08-12 5 views
2

マシンの起動時にユーザーの操作なしでアプリケーションを実行する必要があります。私はこれをすべてのWindows XP、Windows Vista、Windows Server 2003、Windows 7およびWindows Server 2008 OSで実行する必要があります。このため

は、私はこれらの手順、 WindowsサーバOSで「アクティブセッションID」を取得するにはどうすればいいですか?

  1. 取得し、現在アクティブなセッション内で実行されているWinlogonプロセスのプロセスIDを取得しWTSGetActiveConsoleSessionId
  2. を使用して、アクティブなセッションIDを取得し、その後winlogonプロセスへのハンドル
  3. を使用して、winlogonプロセスのアクセストークンへのハンドルを取得します。OpenProcessToken
  4. DuplicateTokenEx Winlogonプロセスのアクセストークンを複製CreateProcessAsUser
  5. を使用して、対話型のウィンドウステーションで、現在のユーザーのログオンセッションで新しいプロセスを作成し、すべてのハンドルを閉じます。

これはすべてのワークステーションで動作し、アクティブなコンソールIDが稼動しているサーバーで動作します。ステップ1ではActive Console Idを捕捉しているので、かなり明白です。 Windowsセッション0アイソレーションが導入される前に、OSでアプリケーションを起動するための他の方法がいくつか見つかりました。

は今、私はWTSGetActiveConsoleSessionIdが有効なIDを返し、新しいセッションを作成し、その中で自分のアプリケーションを起動したり、キャッチアクティブRDPセッションをANそれで自分のアプリケーションを実行したり、表示しない場合は、ユーザー画面にログインしているかどうかをキャッチする必要がありますユーザーが決定することができます(私のアプリケーションはスクリーンキャプチャであるため理想的でしょう)。私は彼らがこれを行う方法であるべきだと確信しており、私はあなたの助けが必要です。

ありがとうございました!

+0

が、私はこの質問はすでにここに頼まれていると考えているあなたの時間を保存:http://stackoverflow.com/questions/5896878/running-a-program-when-windows-boots-ログイン前 – Jamey

答えて

0

私は最終的に私の問題の解決策を見つけました。すべての読者の利益のためにそれを出版する考え。

ここに記載されている7つのステップは正しいです。

それらに追加するには、アクティブとしてリストされていない場合でも

  • コンソールセッションは、まだそこにあることに注意してください。
  • コンソールが非アクティブのときに実行可能ファイルを実行すると、コンソールの最後のセッションIDで実行され、資格情報を提供してマシンにログインするオプションが与えられます。
  • 資格情報を入力すると、コンソールセッションが再度アクティブになります新しいセッションIDを与える
  • あなたのアプリケーションは、アクティブでないコンソールの前のセッションで起動されて以来、この時点で到達不能になります。
  • WTSGetActiveConsoleSessionId結果を監視して新しいアクティブコンソールセッションIDを検出し、変更されている場合は、コンソールセッションで実行可能ファイルを再起動します。

希望、それは:)

関連する問題