我正在尝试将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:如果有人能指出我遗漏了什么,我将不胜感激。
谢谢。
发布于 2013-04-04 16:08:44
我在Windows Server2008 x64上通过TeamCity构建代理(作为服务运行,以系统用户身份运行)运行安装和卸载时遇到了相同的问题。当我通过单击.cmd文件从用户会话中运行脚本时,它工作得很好,但是当TeamCity构建代理试图运行它时,我看到了完全相同的错误:
'C:\Windows\System32\umount.exe‘未被识别为内部或外部命令
现在我有了解决方案。
由于会在C:\Windows\System32\中搜索挂载,因此当您使用C:\Windows\System32\cmd.exe运行挂载时,挂载cmd将工作于。
当您使用c:\Windows\SysWOW64\cmd.exe运行挂载时,挂载SysWOW64会失败,因为此命令会在c:\Windows\SysWOW64\中搜索挂载
发布于 2013-03-08 00:25:53
看看在command.add()调用中编写mount.exe的完整路径时会发生什么。关于这一点,我可能是错的,但我认为,当您自己从命令提示符内调用cmd.exe时,环境变量会自动传递给被调用的程序。使用ProcessBuilder时,这可能不会正确发生,如果完整路径正常工作,可能就表明了这一点。
https://stackoverflow.com/questions/15276071
复制相似问题