3

我正在尝试将挂载命令作为 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:

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

谢谢。

4

2 回答 2

1

从 TeamCity Build Agent(作为服务工作,作为系统用户运行)在 Windows Server 2008 x64上运行挂载卸载时,我遇到了同样的问题。当我通过单击 .cmd 文件从用户会话运行脚本时,脚本工作正常,但是当 TeamCity Build Agent 尝试运行它时,我看到了同样的错误:

'C:\Windows\System32\umount.exe' 未被识别为内部或外部命令

现在我有了解决方案。

当你使用 C:\Windows\System32\cmd.exe 运行它时, mount 可以工作,因为cmd在 C:\Windows\System32\ 中搜索mount

使用 c:\Windows\SysWOW64\cmd.exe 运行时挂载 失败,因为此cmd在 c:\Windows\SysWOW64\ 中搜索挂载

于 2013-04-04T08:08:43.773 回答
0

看看当您在 command.add() 调用中编写 mount.exe 的完整路径时会发生什么。我可能对此有误,但我认为当您自己从命令提示符中调用 cmd.exe 时,环境变量会自动传递给被调用的程序。使用 ProcessBuilder 可能无法正确发生这种情况,如果完整路径有效,则可能表明这一点。

于 2013-03-07T16:25:52.807 回答