2011-04-07 87 views
1

奇怪的行为我有一些Java代码在Windows机器上执行某个命令。但是,这种行为很奇怪,因为同一个命令在一台机器上运行,但在另外三台机器上运行失败。据我所知,四台机器都是相同的。Runtime.getRuntime()。exec()

该命令是这样的:

cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=%APP_HOME%\logs\errors.log -arg3 some more parameters 

%APP_HOME%是一个系统变量设置为值 “d:/路径/到/程序”。

我得到的错误是这样的:有关无法打开日志之一或“相关文件”

应用特定的错误消息: d:/路径/到/程序\日志。错误号= 13,权限被拒绝

Java的我正在使用这样的外观:

Runtime.getRuntime().exec(cmdStr); 

哪里cmdStr是包含命令在上述字符串。现在,我知道的事情是;

  1. 我真正应该使用重载的Runtime.exec(字符串[])方法
  2. 该命令使用的前一组合和反斜杠

这些都是有效的意见,我可能会最终解决问题,但我想解决的是为什么完全相同的代码失败只有在4台机器中有3台。

是的,命令中提到的所有路径都存在于该框中。

它变得更奇怪。如果我执行以下(非常相似)的命令,它可以在所有四个框中正常工作。

cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=D:\path\to\program\logs\errors.log -arg3 some more parameters 

在上述工作版本,该唯一的区别是%APP_HOME%参考已被替换为-errorlogname参数的绝对路径。但是变量已经留在可执行文件的位置。

现在,相同的代码在一个盒子上运行良好的事实让我怀疑问题不是Java代码。同样,斜杠方向的混合我不认为是一个问题,因为这种混合在一台机器上工作。

在我看来,它应该在每台机器上都失败。不只是其中之一。很显然,如果一切都完全相同,它会在每台机器上破坏(或工作)。但是我认为所有的东西都是一样的。

其他人可以提出其他建议吗?

非常感谢。

+0

每个框上的%APP_HOME%的值是多少?您是否确信每台计算机上都安装了相同版本的可执行文件,并且具有相同的用户设置和文件权限? – AndyT 2011-04-07 16:07:26

+0

您是否在所有机器上的命令行中尝试了命令,如果您能重现问题,那肯定不是java问题...... – pgras 2011-04-07 16:35:02

回答

2

我怀疑%APP_HOME%实际上没有设置在发生故障的机器上,但是您正好在正确的目录中启动脚本,以使可执行文件的相对路径工作。要进一步调试,您将不得不通过打印出来验证%APP_HOME%是否具有正确的值。

+0

这是一种可能性,我必须测试一个。我怀疑%APP_HOME%是相同的,因为Java代码是由脚本启动的(在所有框上都是相同的)。但我会检查看看。感谢您的建议。 – Tom 2011-04-07 16:27:40

相关问题