Tomcatで実行されているSpring ControllerからRuntime.getRuntime()。execを使用して.Netウィンドウベースのアプリケーションを呼び出す
-
22-07-2019 - |
質問
Spring Controller経由でmyapp.exeというexeファイルを呼び出しています。コントローラ内のコードは次のとおりです。 Runtime.getRuntime()。exec(" D:\ vmd \ apps \ myapp.exe");
myapp.exeはC#.NETアプリケーションです。 Windowsエクスプローラーを使用してmyapp.exeを直接クリックすると、アプリケーションが開き、実行されます。ただし、Tomcat内のSpring Controllerを介してコマンドを呼び出した場合、アプリケーションは開きません。しかし、タスクマネージャーを開くと、myapp.exeプロセスが実行されていることがわかります。それでも、myapp.exeのウィンドウは開きません。 JBossでは、アプリケーションはSpring Controllerを介して正常に呼び出されます。 .NETアプリケーションがTomcat経由で開かない理由を誰か知っていますか?
Tomcatはサービスとしてインストールされます。 startup.batファイルを使用してTomcatを手動で起動し、Tomcat webapp内のリンクからmyapp.exeを呼び出すと、myapp.exeが正常に起動します。ただし、JBossがサービスとして開始されたときにmyapp.exeが正常に起動したため、Tomcatがサービスとして開始されてmyapp.exeが正しく実行されないかどうかはわかりません。
解決
Windowsでは、サービスとして実行されているプロセスは通常のユーザーデスクトップにアクセスできません。また、サービスによって開始されたプログラムはこのプロパティを継承するため、通常はデスクトップにもアクセスできません。
Tomcatがサービスとして実行されていると述べているように、これが問題の原因だと思います。現時点では、これに適したリファレンスが見つかりません。申し訳ありません。
なぜユーザーセッションで.NETアプリケーションが自動的に起動しないのですか?ソケットを介してTomcatに接続し、何らかの種類の開始信号が到着するのを待つと、アプリケーションのメインウィンドウのマッピングがトリガーされます。