アプリケーションをリモートで起動したい。次のPsExecコマンドを使用しています。
PsExec \\computerOne -u Domain\User1 -p 123456 -x "C:\Windows\System32\calc.exe"
-iを使用して、プログラムがデスクトップと対話できるようにしました。
PsExec \\computerOne -u Domain\User1 -i 123456 -x "C:\Windows\System32\calc.exe"
しかし、それは機能しません。 2番目の例のエラーは次のとおりです。
calc.exeがエラーコード-1073741502でcomputerOneで終了しました
指定を省略してexeのパスを書き込むだけの場合、プロセスはタスクマネージャーにリストされますが、UIが表示されません。プログラムを起動するデスクトップの設定を変更する必要がありますか?
表示されているものは、おそらく セッション0分離 の影響であると考えられます。psexecはリモートマシンに新しいサービスをインストールして開始しますが、プロセスを開始するデフォルトセッションは0なので、利用できません。現在ログオンしているユーザーに(少なくともWindows Vista/Server 2008から)。 -i
パラメータの後にセッション番号を指定する必要があります。事前にquser /SERVER:computerOne
コマンドを使用して、現在ログオンしているユーザー(およびそのセッション番号)をクエリできます。
迅速かつダーティなテストのために、最初に対話的にログオンしたユーザーのセッションIDが「1」であると想定できます。
-xを取り出して-Iで置き換えることもできます。PsExec\ computerOne -u Domain\User1 -p 123456 -i "C:\ Windows\System32\calc.exe"が開きます。
根本原因は、Console.Write
のMicrosoft.powershell.consolehost.dll
メソッドによって作成されたハンドルのリークのようです。 16進数の-1073741502終了コードは0xC0000142(status_dll_init_failed)です。
これは、Windows 7および2008に隔離されているようです(Microsoftの KB270137 に従って)。
注意事項:インターネット上の他のいくつかの「修正」は、何らかの魔法の呪文を実行してから、PowerShellを閉じて新しいインスタンスを開くことに起因しています。ただし、PowerShellを「再起動」することで、一時的に問題が解決されます。