【问题标题】:Running .exe from Java gives different console output then running .exe directly from Windows从 Java 运行 .exe 会提供不同的控制台输出,然后直接从 Windows 运行 .exe
【发布时间】:2017-06-08 13:04:43
【问题描述】:

所以这个有点奇怪 - 为什么从 Java 运行 .exe 文件与直接运行 .exe 会给出不同的输出。

当 java 在下面执行时,它会调用一个我构建的 .exe 文件,该文件适用于 3CX 电话系统。

p = Runtime.getRuntime().exec("3cx-api-application/orderly-3cx.exe");

从 java/eclipse/jar 文件执行代码时,会打印以下错误。

INFO: 3CX Initialization Started
Jun 08, 2017 1:58:19 PM com.orderlysoftware.threecx.Orderly3CXConnector threeCXinit
INFO: Sending: Initializing 3cx-Orderly Connector
Jun 08, 2017 1:58:28 PM com.orderlysoftware.threecx.Orderly3CXConnector threeCXinit
SEVERE: SEVERE: 
Jun 08, 2017 1:58:28 PM com.orderlysoftware.threecx.Orderly3CXConnector threeCXinit
SEVERE: SEVERE: Unhandled Exception: TCX.Configuration.Exceptions.PhoneSystemException: ConfigServer is not connected
Jun 08, 2017 1:58:28 PM com.orderlysoftware.threecx.Orderly3CXConnector threeCXinit
SEVERE: SEVERE:    at TCX.Configuration.PhoneSystem.Connect()

现在,当我通过进入 3cx-api-application 并单击 orderly-3cx.exe 程序直接导航到 .exe 文件时,程序执行得很好,给了我下面的输出。

注意:两个输出上的“初始化 3cx-orderly 连接器”行。

Initializing 3cx-Orderly Connector
Program Initialized
Initialize Monitor
*0 NOT REGISTEREDVMB(0/0)
a length: 0
*1 NOT REGISTEREDVMB(0/0)
a length: 0

更奇怪的是,这曾经在 java 中可以工作,但现在不行了。 .exe 文件应该做的就是连接到 3CX API 并将一些输出打印到控制台,然后这个输出应该被 java 类读取。

我已经清理了两个项目(eclipse/visual studio),重新编译了所有类等。仍然是同样的问题

【问题讨论】:

  • 您的工作文件夹似乎有所不同。我认为在 Java 应用程序中,您的工作文件夹将比直接运行 exe 高一级。如果程序正在寻找配置文件或其他东西,这可能会影响它。
  • @RB。 .exe 文件正在寻找配置文件,但配置文件与 .exe 文件位于同一位置。 Exe 已经有预定义的配置路径 - 解析到 Exe 自身所在的根目录。
  • 但您运行的 .exe 文件与 .exe 文件不在同一目录中。
  • @MaciejCygan 你确定resolving to root directory where Exe it self resides 是真的吗?你确定不是resolving to working directory(更有可能)...
  • 简单的测试方法。在命令提示符中导航到 3cx-api-application 的父文件夹并运行命令 3cx-api-application/orderly-3cx.exe。如果您遇到与 Java 相同的错误,那么我几乎可以肯定是对的 :)

标签: java c# windows eclipse exe


【解决方案1】:

可执行文件从与自身相同的目录中读取配置文件。您需要从该目录运行可执行文件。见http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec-java.lang.String-java.lang.String:A-java.io.File-

试试:

p = Runtime.getRuntime().exec("orderly-3cx.exe", null, "3cx-api-application");

(P.S. Oracle 的 Javadoc 建议新应用程序应使用 ProcessBuilder 而不是 Runtime。)

【讨论】:

  • 你的语法有点不对劲。应该是.., new File(System.getProperty("user.dir") + "/3cx-api-application")); 但这似乎并不能解决问题。我仍然收到错误(看起来工作目录设置不正确?)
  • 不过,感谢您的建议,我找到了一个很好的解决方案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 2021-09-05
  • 1970-01-01
  • 2011-04-23
  • 2013-12-05
相关资源
最近更新 更多