簡體   English   中英

從Java執行.exe文件

[英]Executing .exe file from java

我想從我的Java代碼中運行一個.exe文件,並將少量參數/選項傳遞給.exe文件。

所以基本上,我做到了:

BufferedReader br = null;
OutputResult out = new OutputResult();

String commandStr= "cmd.exe /C A-B/xyz.exe health -U admin -P admin";
Process p = Runtime.getRuntime().exec(commandStr);

br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
    out.add(line.trim());
}

注意:這里AB是xyz.exe所在目錄的名稱。

但是當輸出變量out時,實際上表明它什么也沒有。

因此,我將其修改為以下內容,而不是上面的代碼:

BufferedReader bre = null;
OutputResult oute = new OutputResult();

String commandStr= "cmd.exe /C A-B/xyz.exe health -U admin -P admin";
Process p = Runtime.getRuntime().exec(commandStr);

bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line;
while ((line = bre.readLine()) != null) {
    oute.add(line.trim());
}

現在在這里,當輸出變量oute時,它顯示消息,

無法將“ AB”識別為內部或外部命令,可操作程序或批處理文件。

所以我的問題是,為什么不將AB視為實際.exe文件所在的目錄。

如果有人知道此問題,請解決該錯誤。

您應該使用指向目標xyz.exe的完整路徑-這樣執行cmd.exe時,它與Java程序的文件夾無關,而與C:\\Windows\\System32相對,因此看不到AB夾。

因此,例如: cmd.exe /CC:/AB/xyz.exe health -U admin -P admin

而且正如正確地注意到@CSK一樣,您可以直接執行.exe,而無需cmd.exe。 例如:

Process process = new ProcessBuilder("C:/A-B/xyz.exe", "health", "-U", "admin", "-P", "-admin").start();

我知道,例如,Raspbian上的Java無法訪問帶有空格的目錄(例如/ New Folder)。 我猜這是關於Raspbian在創建目錄時如何考慮'char的問題。 Windows可能會在'-'字符上出現相同的問題。 您可以在沒有任何此類字符的情況下重命名目錄,然后重試嗎?

(我使用的是Mac,因此無法重現該問題。另一種選擇是,如果實際上這與chars無關緊要,則可以創建一個執行exe的shell腳本,然后通過Java。我只是建議這樣做,因為我以前使用此方法沒有任何問題。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM