我正在尝试将mount命令作为Java进程执行。以下是我如何形成命令:
List<String> command = new ArrayList<String>();
command.add("cmd.exe");
command.add("/c");
command.add("mount.exe");
command.add("-u:" + username);
command.add("-p:" + password);
command.add(IP + ":" + mountPoint);
command.add(driveLetter + ":");
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
当我执行此操作时,我收到错误
'mount.exe' is not recognized as an internal or external command,
operable program or batch file.
我安装了mount.exe,路径在环境变量
中设置C:\>where mount.exe
C:\Windows\System32\mount.exe
C:\>path
PATH=C:\Windows\System32;C:\Windows; ... [removed the remaining entries]
当我在命令提示符下手动执行命令时,它可以正常工作:
C:\>cmd.exe /c mount.exe -u:<user> -p:<password> <IP>:<mount point> Z:
如果有人能指出我所缺少的东西,我将不胜感激。
感谢。
答案 0 :(得分:1)
我在TeamCity Build Agent的Windows Server 2008 x64 上运行 mount 和 unmount 时遇到同样的问题(作为服务运行,运行作为系统用户)。 当我通过单击.cmd文件从用户会话运行脚本时,脚本工作正常,但是当TeamCity Build Agent尝试运行它时,我看到了同样的错误:
'C:\ Windows \ System32 \ umount.exe'未被识别为内部或外部命令
现在我有了解决方案。
使用C:\ Windows \ System32 \ cmd.exe运行mount 的工作,因为 cmd 搜索 mount 在C:\ Windows \ System32 \
中 使用c:\ Windows \ SysWOW64 \ cmd.exe运行mount 失败,因为此 cmd 搜索在<:Windows \ SysWOW64 \
中安装答案 1 :(得分:0)
查看在command.add()调用中编写mount.exe的完整路径时会发生什么。我可能错了,但我认为当你自己在命令提示符中调用cmd.exe时,环境变量会自动传递给被调用的程序。使用ProcessBuilder可能无法正确执行此操作,如果完整路径有效,则可能表明了这一点。