Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Runtime.getRuntime().exec()的奇怪行为_Java_Windows_Process_Command_Runtime.exec - Fatal编程技术网

Java Runtime.getRuntime().exec()的奇怪行为

Java Runtime.getRuntime().exec()的奇怪行为,java,windows,process,command,runtime.exec,Java,Windows,Process,Command,Runtime.exec,我有一些Java代码,它在Windows机器上执行某个命令。然而,它的行为很奇怪,因为同一个命令在一台机器上工作,但在其他三台机器上失败。据我所知,这四台机器都是一样的 命令如下: cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=%APP_HOME%\logs\errors.log -arg3 some more parameters 其中%APP\u HOME%

我有一些Java代码,它在Windows机器上执行某个命令。然而,它的行为很奇怪,因为同一个命令在一台机器上工作,但在其他三台机器上失败。据我所知,这四台机器都是一样的

命令如下:

cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=%APP_HOME%\logs\errors.log -arg3 some more parameters
其中
%APP\u HOME%
是一个系统变量,设置为值“D:/path/to/program”

我得到的错误是:

关于无法打开其中一个日志或“相关文件”的特定于应用程序的错误消息: d:/path/to/program\logs。errno=13,权限被拒绝

我使用的Java如下所示:

Runtime.getRuntime().exec(cmdStr);
其中
cmdStr
是包含上述命令的字符串。现在,我知道的事情是

  • 我真的应该使用重载的Runtime.exec(String[])方法
  • 该命令混合使用前斜杠和后斜杠
  • 这些都是有效的注释,我可能最终会解决这个问题,但我试图解决的是,为什么完全相同的代码在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\u HOME%
    引用已替换为
    -errorlogname
    参数的绝对路径。但变量被保留在可执行文件的位置

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

    在我看来,每台机器都应该出现故障。不仅仅是其中一个

    显然,如果所有东西都是一样的,那么每台机器都会坏(或工作)。但是我想看的所有东西都是一样的

    能不能有人建议其他方面考虑?


    非常感谢。

    我怀疑
    %APP\u HOME%
    实际上并没有设置在故障机器上,但您恰好在正确的目录下启动了脚本,以使可执行文件的相对路径正常工作。要进一步调试,您必须通过打印出来来验证
    %APP\u HOME%
    是否具有正确的值。

    每个框上%APP\u HOME%的值是多少?你确信每台机器上都安装了相同版本的可执行文件,并且具有相同的用户设置和文件权限吗?你是否在所有机器上的命令shell中尝试过该命令,如果你能重现该问题,它肯定不是java问题……这是一种可能性,我必须进行测试。我怀疑%APP_HOME%是相同的,因为Java代码是由脚本启动的(在所有框中都是相同的)。但我会查查看的。谢谢你的建议。