[英]ProcessBuilder can't find custom .exe
我目前正在嘗試在 java 中編寫一個小程序,它應該接管我一直在使用的舊批處理腳本的工作。
此批處理腳本執行名為 sum.exe(Supermicro 更新管理器)的程序。
但是,無論我嘗試哪種方式,程序要么沒有響應,要么直接告訴我它在文件所在的目錄中找不到文件。
boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows");
ProcessBuilder builder = new ProcessBuilder("C:\\Users\\[Username]\\SUM\\sum.exe");
if (isWindows) {
builder.command("sum.exe", "-i 192.168.4.10 -u ADMIN -p ADMIN -c CheckOOBSupport");
} else {
builder.command("sh", "-c", "ls");
}
builder.redirectErrorStream(true);
Process process = builder.start();
StreamGobbler streamGobbler = new StreamGobbler(process.getInputStream(), System.out::println);
StreamGobbler streamGobblerErrors = new StreamGobbler(process.getErrorStream(), System.out::println);
Executors.newSingleThreadExecutor().submit(streamGobbler);
Executors.newSingleThreadExecutor().submit(streamGobblerErrors);
int exitCode = process.waitFor();
assert exitCode == 0;
這是我目前擁有的代碼。 我在這里嘗試調用的命令將 100% 給出錯誤,因此我確保也重定向這些命令。
據我了解,有 3 種不同的方法可以為 Processbuilder 設置文件路徑。 你要么:
我在以下位置有一個 SUM 文件夾的完整副本: C:\Users\[Username]\SUM
,我已經嘗試了上面列出的所有 3 個選項,但總是收到系統找不到指定文件的錯誤消息此外,我仍然不確定該命令是否會以這種方式工作。 我只通過批處理腳本或 cmd.exe 本身使用過 sum.exe,所以不需要命令
builder.command("cmd.exe", "sum.exe -i 192.168.4.10 -u ADMIN -p ADMIN -c CheckOOBSupport)
反而?
誰能告訴我我做錯了什么? 謝謝!
ProcessBuilder
命令行在構造函數或command()
方法中傳遞,因此在您的示例中,您已經覆蓋了使用的值。
選擇您需要的方式:
ProcessBuilder builder = new ProcessBuilder("C:\\Users\\[Username]\\SUM\\sum.exe",
"-i", "192.168.4.10",
"-u", "ADMIN","-p", "ADMIN",
"-c", "CheckOOBSupport");
或者
ProcessBuilder builder = new ProcessBuilder();
builder.command("sum.exe",
"-i", "192.168.4.10",
"-u", "ADMIN","-p", "ADMIN",
"-c", "CheckOOBSupport");
另請注意,該命令的 arguments 需要作為單獨的字符串值提供,而不是全部連接在一起作為一個值,如果在當前目錄或環境目錄下找不到“sum.exe”的絕對路徑,則需要變量“路徑”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.