2015-02-05 27 views
0

我有exe文件需要管理权限才能运行。我使用的ProcessBuilder是这样的:需要从Java代码启动需要管理权限的进程并获取错误级别

ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/C", "start", "/wait", "myexe.exe", "&", "echo", "%errorlevel%"); 
Process p = processBuilder.start(); 

作为的ProcessBuilder构造函数的参数部分,必须有cmd.exe /C,因为没有它,它是不可能的启动MYEXE.EXE - 我总是得到错误信息

请求操作需要提升。

cmd.exe /C它正常启动,UAC问我是否肯定启动它。但后来我得到

java %errorlevel% from cmd.exe (process.exitValue()) 

它始终为0,而​​不是my.exe.exe的%errorlevel%。

然后我尝试连接命令& end echo %errorlevel%。然后,我打开输入流并读取回写的内容。它始终为0。

它工作在批处理文件:

myexe.exe 
echo %errorlevel& 

但不是内联作为的ProcessBuilder。任何帮助?

回答

0

获得 “ERRORLEVEL”(真正的进程退出值),你可以使用像

Process p = processBuilder.start(); 
int errorLevel = p.waitFor(); 

Process.waitFor()的Javadoc说(部分),

返回:

Process对象表示的子进程的退出值。按照惯例,值0表示正常终止。

+0

它不起作用。 waitFor()返回0,但如果我从cmd行运行myexe.exe,然后echo%errorlevel%,我得到了544. – bizdej 2015-02-05 13:09:50

+0

@bizdej然后我认为你运气不好。以上是如何从Java子进程获取“errorlevel”。 – 2015-02-05 13:19:54

+0

是的,但my.exe在这种情况下是java subsubsubprocess;)。 cmd.exe是子进程。那就是问题所在。可能是我需要准备将%errorlevel%存储到文件中的批处理文件,并且我的Java应用程序将读取它,但这是如此肮脏的解决方案! – bizdej 2015-02-05 13:22:21