最初我在没有前导"cmd"
的情况下运行此代码,并且我收到了拒绝访问的消息。 Postgres由一个无法登录的帐户作为服务运行,我是运行此应用程序的管理员。包含"cmd"
的尝试不会返回任何输入。我的问题是如何执行这些语句以实现生成的文件和数据更改?
String[] psqlCommands = {"cmd ",postgresLocation, " -dDatabase ", " -UUser ",
"-c ", "UPDATE host.user SET service = 1 WHERE service = 1;" +
"UPDATE host.permission SET service = 1 WHERE service = 2"};
Runtime.getRuntime().exec(psqlCommands);
String[] pgDumpCommands = {"cmd ", postgresLocation, " --data-only ",
"-t host.user_info -t host.permission -t host.group -t host.account -t host.password " +
"-UUser Database> "
+ DATA + "\\dataExport.sql"};
Runtime.getRuntime().exec(pgDumpCommands);
生成的异常是Access Denied
目录上的Postgres_Bin
异常。一旦我得到必要的材料,我会发布一条痕迹。
Exception in thread "main" java.io.IOException: Cannot run program "d:\program f
iles\postgres\bin": CreateProcess error=5, Access is denied
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at Thing.main(Thing.java:85)
Caused by: java.io.IOException: CreateProcess error=5, Access is denied
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 4 more
答案 0 :(得分:1)
首先,如果你想在windows shell的上下文中运行某些东西,你必须使用cmd /c
。否则你只是运行cmd本身。这就是你没有得到任何东西的原因。
修复代码时,由于您似乎没有足够的权限,因此您需要完全取消访问权限。解决问题
1.修复你的权限
2.如果不可能尝试使用runas
命令以不同的用户身份运行外部进程。
答案 1 :(得分:1)
从错误中看起来你正在尝试运行目录,而不是附加“psql”或“pg_dump”来获取实际的可执行文件名。
我也相信你不需要在开头包含“cmd”,所以再试一次。
答案 2 :(得分:1)
java.io.IOException:无法运行程序“d:\ program files \ postgres \ bin”
此错误表示路径中的空格混淆了exec()调用(目录 bin 实际上并不是Windows可以运行的任何内容)
请确保由于空格而用双引号括起.exe的完整路径。
我认为建议使用ProcessBuilder而不是使用exec(),因为您可以使用不同的参数指定参数和程序,避免使用空格转义路径名。