2013-01-18 33 views
3

我正在开发一个java应用程序,我必须从中运行xyz_setup.exe安装程序。我尝试下面的代码如何使用java运行setup.exe文件

String command = "C:\\xyz_setup.exe"; 
Runtime.getRuntime().exec(command);` 

但它被扔以下错误

java.io.IOException: Cannot run program "C:\Users\NewtonApples\Downloads\idman614.exe": CreateProcess error=740, The requested operation requires elevation 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
    at java.lang.Runtime.exec(Runtime.java:615) 
    at java.lang.Runtime.exec(Runtime.java:448) 
    at java.lang.Runtime.exec(Runtime.java:345) 
    at upendra.OpenExternalApplication.main(OpenExternalApplication.java:19) 
Caused by: java.io.IOException: CreateProcess error=740, The requested operation requires elevation 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:189) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:133) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021) 
    ... 4 more 

任何一个可以建议我如何做到这一点?

+2

http://stackoverflow.com/questions/1385866/java-run-as-administrator – madhairsilence

+0

@madhairsilence为Java开发人员的可能的复制,你并不总能控制运行你的代码的可执行文件(比如'java.exe') - 通常做清单文件等不是一种选择。这是合法的问题,一个可能的解决方案是通过'cmd'运行程序,该程序知道如何请求权限提升。他并没有要求提升当前流程 - 他只想运行升级设置,这是一个不同的问题,所以这不是重复的。 – Cozzamara

回答

5

对于需要访问权限的可执行文件,Java(或可能是任何其他直接使用CreateProcess系统调用的进程)效果不佳。 您可以通过shell执行程序绕开这个问题:

String command = "C:\\setup.exe"; 
    Runtime.getRuntime().exec("cmd /c "+command); 
+0

这是完美运行,但是当可执行文件位于以下位置时,它显示错误。 **路径:E:\\新建文件夹\\ Setup.exe ** – upendra

+1

这是因为文件夹名称中有空格 - 用双引号括起来:'Runtime.getRuntime()。exec(“cmd/c \”“+命令+“\”“);' – Cozzamara

+0

谢谢。它工作正常。是否有可能跟踪安装进度。这意味着在完成Setup.exe安装后,我必须通过java显示“成功完成安装”消息。方面的 – upendra