【问题标题】:How to run setup.exe file using java如何使用 java 运行 setup.exe 文件
【发布时间】:2013-01-01 19:27:02
【问题描述】:

我正在开发一个 java 应用程序,我必须从中运行 xyz_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

谁能建议我如何做到这一点?

【问题讨论】:

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

标签: java security permissions runtime.exec


【解决方案1】:

Java(或可能任何其他直接使用CreateProcess 系统调用的进程)不适用于需要访问提升的可执行文件。 你可以通过 shell 执行你的程序来解决这个问题:

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

【讨论】:

  • 这运行得很完美,但是当可执行文件位于以下位置时,它会显示错误。 路径:E:\\新文件夹\\Setup.exe
  • 那是因为文件夹名称中有空格 - 用双引号括起来:Runtime.getRuntime().exec("cmd /c \"" + command + "\"");
  • 谢谢。它工作正常。是否可以跟踪安装进度。这意味着在完成 Setup.exe 安装后,我必须通过 java 显示“成功完成安装”消息。问候
  • 当然。 Runtime.exec 返回 Process 类型的对象。在此,您可以通过exitValue() 获取安装程序的退出代码。 getOutputStream()getErrorStream() 将为您提供其标准输出和标准错误流。要获得所有这些,您必须首先执行Process.waitFor(),当然,等待它完成。非零退出代码很可能表示失败,但请检查您的具体设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多