如何从Java EE Web应用程序运行外部应用程序?

我一直在使用一个Web应用程序来使用Intranet。 我使用Apache 7和Windows Server 2003。

在我的一个页面中,我需要打开一个外部应用程序,我们可以在C:/ Program Files / etc中find一些已经初始化的参数。 当然,用户必须使用服务器上的Web应用程序才能使其工作(情况就是如此)。

要打开应用程序,我使用ProcessBuilder对象。

问题:

当我在Eclipse上本地工作并手动运行服务器时,它完美地工作。 任何应用程序都可以从网页打开自己。 但是,当我使用tomcat的Windows服务(这就是我们想在服务器上使用),它只是从来没有启动。 或者更具体地说,它直接启动和停止应用程序。 没有Java错误抛出和process.waitFor()退出值为0.事实是,我们可以通过Web应用程序运行进程(我试图运行简单的batch file),但是当涉及到UI时,它将永远不会出现。

同样,这次在服务器上,如果通过双击或cmd启动tomcat7.exe(我们可以在%CATALINA_HOME%/ bin目录中find),Web应用程序中的UI将会出现。 如果我用services.msc或tomcat7w.exe或tomcat7 start它通过CMD tomcat7 start ,它不会。

我想到了几件事情:

  • 使用另一个用户来启动服务
  • 改变服务的启动方式(StartMode:jvm,java。我没有用exe成功)我多次阅读了Tomcat 7的Windows Service How-To ,但没有find任何解决我的问题。

你有什么想法发生了什么,以及如何解决这个问题? 运行tomcat作为服务和命令行有什么区别?

选项1如果打开服务的属性窗口,请转到登录选项卡,然后选中“允许服务与桌面交互”复选框,您将获得所需的行为。 还取决于你要运行什么应用程序,您可能需要更改帐户上的日志。

请参阅从Windows服务启动GUI应用程序 – 窗口不会出现

选项2你尝试启动一个命令,并使用开始/ c“c:\路径\ exe”

在cmd.exe中键入帮助启动


选项3

您将需要一个不作为服务运行的守护进程服务。 Windows对服务应用程序有一定的限制。

这个睡觉的应用程序可以由tomcat或其他你自己启动。 它可以侦听端口或轮询文件夹中的新文件,当它得到一个工作来做它启动你想要的应用程序。 通过端口或文本文件可以发送参数。