簡體   English   中英

ProcessBuilder 找不到 custom.exe

[英]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 設置文件路徑。 你要么:

  1. 在構造函數中設置路徑
  2. 在 .command() 方法中設置可執行文件和 arguments 之間的路徑
  3. 或者您通過創建一個新文件(並使用 System.Property)來設置構建器的目錄

我在以下位置有一個 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.

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