奇怪的行为我有一些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
是包含命令在上述字符串。现在,我知道的事情是;
- 我真正应该使用重载的Runtime.exec(字符串[])方法
- 该命令使用的前一组合和反斜杠
这些都是有效的意见,我可能会最终解决问题,但我想解决的是为什么完全相同的代码失败只有在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代码。同样,斜杠方向的混合我不认为是一个问题,因为这种混合在一台机器上工作。
在我看来,它应该在每台机器上都失败。不只是其中之一。很显然,如果一切都完全相同,它会在每台机器上破坏(或工作)。但是我认为所有的东西都是一样的。
其他人可以提出其他建议吗?
非常感谢。
每个框上的%APP_HOME%的值是多少?您是否确信每台计算机上都安装了相同版本的可执行文件,并且具有相同的用户设置和文件权限? – AndyT 2011-04-07 16:07:26
您是否在所有机器上的命令行中尝试了命令,如果您能重现问题,那肯定不是java问题...... – pgras 2011-04-07 16:35:02