ユーザーがログインしていない状態で対話型プログラムを開くための PSExec

ユーザーがログインしていない状態で対話型プログラムを開くための PSExec

私はPSExecを使って、別のコンピュータで小さなGUIを持つ特定のサーバープログラムを開いています。ローカルとターゲットは両方ともWin7 64ビットです。私はそれを使って開きます。

psexec \myothercomputer -u Me -p mypass -i -d -h myapp.exe

これは、他のコンピュータにもログインしているときには正常に動作します。しかし、このプログラムをこのように実行する目的は、そのコンピュータにログインしなくても済むようにすることです。

今日、何が起こるかを確認するために、ログインせずにアプリケーションを実行してみました。エラーが返されると思いました。しかし、PSExec はプロセス ID を返しました。

その後、そのコンピューターにログインすると、驚いたことに、実行しようとしたアプリケーションの形をしたグラフィックの「影」のようなものが表示されました。ログインしていないのに、実際にアプリケーションが開かれたかのようでした。

画面のリフレッシュの問題だと思い、そのアプリを「起動」させたり操作したりする方法をいくつか試しましたが、実際には正しく表示されませんでした。タスク マネージャーを使用して、このアプリのメモリ消費量が想定よりも少ないことに気付きました... つまり、どこかの時点で問題が発生したのだと思います。そして、それが実際に期待していたことであり、実行されることです。

質問: PSExec がログインせずに対話型アプリケーションを正常に開くのはなぜですか? では、対話型アプリケーションが正しく実行されないのはなぜですか?

答え1

によるPSExecページで、-i [セッション] スイッチはこれを実行します:

プログラムを実行して、リモート システム上の指定されたセッションのデスクトップと対話します。セッションが指定されていない場合は、プロセスはコンソール セッションで実行されます。

コマンドでは、マニュアルページに示されているように、-i の直後にセッションを指定しません。

また、-d が指定されていることにも気付きました。特にユーザーがログインしていない場合は、-i と -d を混在させることはできないと思います。-i はコンソール セッションで実行されますが、-d はプロセスの有効期間を決定するためにコンソール セッションを使用しないように指定するためです。

-d プロセスが終了するのを待たない (非対話型)。

関連情報