需要从Java代码启动需要管理员权限的进程并获取错误级别

时间:2015-02-05 13:04:04

标签: java windows cmd

我有需要管理员才能运行的exe文件。我这样使用ProcessBuilder:

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,而​​不是来自myexe.exe的%errorlevel%。

然后我尝试通过& end echo %errorlevel%连接命令。然后我打开输入流并读取echo写的内容。它总是读为0。

它适用于批处理文件:

myexe.exe
echo %errorlevel&

但不像ProcessBuilder那样内联。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

要获得“errorlevel”(实际上是进程退出值),您可以使用类似

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

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

  

<强>返回:

     

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