2013-03-07 19 views
3

我試圖執行一個裝載命令作爲Java進程。以下是我是如何形成的命令:從Java進程運行時找不到mount.exe

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:\>cmd.exe /c mount.exe -u:<user> -p:<password> <IP>:<mount point> Z: 

如果有人能指出我錯過了什麼,我將不勝感激。

謝謝。

回答

0

看看在command.add()調用中寫入mount.exe的完整路徑時會發生什麼。我可能對此有錯,但我認爲當你自己在命令提示符中調用cmd.exe時,環境變量會自動傳遞給被調用的程序。這可能不會使用ProcessBuilder正確發生,並且如果完整路徑有效,它可能就是一個指示。

+0

我試過了,那也沒有幫助。 ''C:\ Windows \ System32 \ mount.exe'不被識別爲內部或外部命令,可操作程序或批處理文件。' \t 順便說一句,同一個程序在另一個Windows機器上工作;都有Windows Server 2008 R2。 – Yam 2013-03-07 16:36:37

1

我有運行在Windows Server x64的從TeamCity的安裝卸載生成代理同樣的問題(工作作爲服務,運行的系統用戶)。 腳本工作正常,當我點擊.cmd文件從用戶的會話中運行,但當TeamCity的生成代理嘗試運行它,我看到了同樣的錯誤:

'C:\Windows\System32\umount.exe' is not recognized as an internal or external command

現在我有解決方案。

安裝工作當你使用C運行:\ WINDOWS \ SYSTEM32 \ cmd.exe的,因爲CMD搜索在C接口:\ WINDOWS \ SYSTEM32 \

安裝失敗當你使用C運行:\ WINDOWS \ Syswow64資料\ cmd.exe的,因爲這CMD搜索在C接口:\ WINDOWS \ Syswow64資料\