从Java进程运行时找不到mount.exe

时间:2013-03-07 16:11:42

标签: java windows mount

我正在尝试将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:

如果有人能指出我所缺少的东西,我将不胜感激。

感谢。

2 个答案:

答案 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可能无法正确执行此操作,如果完整路径有效,则可能表明了这一点。