0

サーバーとクライアントがあり、クライアントはwrapperを使用してバックグラウンドで実行されています。サーバーは以下を使用してクライアントにコマンドを送信しSocketChannels、クライアントは次の方法でコマンドを実行します。

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);

これは、通常のようにコンソールからクライアントを実行するときにうまく機能します。しかし、Windows サービスとして実行すると、いくつかのコマンドが機能しません。例えば:

runtime.exec("shutdown -s -t 300");// works perfectly
runtime.exec("shutdown -a");       // works perfectly
runtime.exec("shutdown -l");       // works only when client started from console
// note that these commands will shutdown your computer or log off

3 番目のコマンドは単に何もしていないため、プログラムは正常に動作します。コマンドを別々にランダムな順序で実行しますが、違いはありません。私はWindowsを使用しています。

それで、私は何を間違っていますか?

また、サービス「notepad.exe」(またはフルパスを持つ別の.exe)から実行できません。これを行う正しい方法を知りたいです(コンソールからも機能します)。

4

1 に答える 1

1

デフォルトでは、Windows サービスはデスクトップと対話できません。コマンドが何らかの GUI を介してユーザーから何らかの応答を必要とする場合、コマンドはハングします。これを解決する 1 つの方法は、サービスがデスクトップとやり取りできるようにすることです (SCM のサービス プロパティで)。もう 1 つの方法は、そのような相互作用を単純に回避することです。-y試したことはありませんが、スイッチは再起動の問題を解決するはずだと思います。2番目のオプションは、私が行くものです。

于 2012-07-03T12:25:39.370 に答える