我正在尝试通过java代码安装postgreSql.exe。我将安装程序exe文件保存在workspace/project-root-folder/data
下。我试图通过我的java代码执行下面的命令:
installationCommand = "postgresql-9.5.3-1-windows-x64.exe --mode unattended --installer-language en --serverport 5433 --superaccount test_admin --superpassword ‘password’"
以下是我在java代码中使用的代码片段:
System.out.println("Lets install postgreSql");
ProcessBuilder b = new ProcessBuilder();
b.directory(new File("data").getAbsoluteFile());
b.command(installationCommand);
b.start();
通过此设置,我得到异常:
java.io.IOException: Cannot run program "postgresql-9.5.3-1-windows-x64.exe --mode unattended --installer-language en --serverport 5433 --superaccount protoel_admin --superpassword ‘password’" (in directory "C:\DurgeshProjectWork\Workspace\protoel-core\data"): CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at frontend.guifx.pginstallation.PgStandaloneInstaller.installPg(PgStandaloneInstaller.java:27)
at frontend.guifx.controller.ProtoelController.initialize(ProtoelController.java:386)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2445)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3218)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3128)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3108)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3101)
at frontend.guifx.main.ProToelApplication.start(ProToelApplication.java:34)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherImpl.java:863)
at com.sun.javafx.application.LauncherImpl$$Lambda$53/953109155.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl$$Lambda$45/2034688500.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295)
at com.sun.javafx.application.PlatformImpl$$Lambda$48/3243045.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294)
at com.sun.javafx.application.PlatformImpl$$Lambda$47/1007251739.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101)
at com.sun.glass.ui.win.WinApplication$$Lambda$36/1508395126.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 25 more
请有人告诉我如何通过java代码从特定目录执行命令。请帮忙。提前致谢
答案 0 :(得分:1)
您似乎在.directory()
方法中指定了错误的目录。你必须仔细检查。确保传递给此方法的值指向postgresql安装程序目录。
答案 1 :(得分:0)
要使用此命令,必须将每个参数拆分为一个字符串数组。请参阅ProcessBuilder.command(String... args)
文档。您可以使用installationCommand.split(" ")
获取String[]
。
还要检查目录路径是否正确,以防万一。