【问题标题】:Java - Executing exe with Admin Rights [duplicate]Java - 以管理员权限执行 exe [重复]
【发布时间】:2014-04-15 12:12:11
【问题描述】:

我目前正在开发一种学习工具,它将几个便携式系统管理工具(主要是 sysinternal 工具)组合在一起。我有一个带有 JButton 的简单框架。

我想做什么? - 除了我的 java 文件,我还有一个需要提升权限才能运行的 exe 文件(例如,我们使用 config.exe)。

用户点击按钮后如何执行这个文件?

编辑:我刚刚找到了另一种方法。我从我的 jar 文件中创建了一个 exe,然后转到兼容性选项卡并选中“始终以管理员身份运行”,感谢您的所有帮助。

【问题讨论】:

    标签: java admin-rights


    【解决方案1】:

    首先找到exe文件所在的目录,然后创建一个文本文件,命名为

    “Your_Exe_File_Name”.exe.manifest

    只需将以下内容放入文件并保存即可。

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity version="1.1.1.1"
       processorArchitecture="X86"
       name="MyApp.exe"
       type="win32"/>
      <description>elevate execution level</description>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
       <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
       </requestedPrivileges>
      </security>
      </trustInfo>
     </assembly>
    

    现在在您的 java 代码中使用它来调用 exe。它将自动以管理员权限调用。

    Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2",).start();
    InputStream is = process.getInputStream();//Get an inputstream from the process which is being executed
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;
    while ((line = br.readLine()) != null) {
    System.out.println(line);//Prints all the outputs.Which is coming from the executed Process
    }
    

    我认为这对你会有帮助。

    【讨论】:

    • 您好,感谢您提供如此有用的信息。我正在使用 Launch4j 将清单添加到 exe,但在编译 exe 后,我总是收到错误消息“应用程序无法启动,因为它的并排配置不正确。”我该如何克服呢?谢谢
    • OK,在将manifest嵌入到exe之前。你运行过吗。结果如何?
    • 是的,我可以运行它,但我无法执行 exe。我对特权有一个奇怪的错误。我的程序有两个主要功能,更改网络接口 IP 地址和打开其他程序,但是现在,如果我右键单击 exe 并“以管理员身份执行”,我可以更改网络接口 IP 但无法运行 exe。如果我只是执行 jar 文件,我可以运行 exes 但不能更改 IP 地址。有什么提示吗?
    • 你是什么意思我可以更改网络接口ip但不能运行exes
    • 至于 EXE,我的意思是位于名为“Applications”的文件夹中的其他应用程序这些是我的 java 程序引用的可移植应用程序,它能够执行它们(其中一些需要管理权限)它们主要是 Sysinternals 工具。至于更改网络接口,如果您有一个启用 DHCP 的 NIC 并想通过我的程序更改它,您也可以做到。这是通过参考cmd命令完成的。
    【解决方案2】:

    当您尝试运行 exe 文件时,我假设这是 Windows。

    在java中执行外部命令的标准方式是.exec命令:

    Runtime.getRuntime().exec("path\to\config.exe");
    

    现在,要让config.exe 以管理员身份运行,您需要将其设置为从 Windows 以管理员身份运行。在资源管理器中右键单击该文件,然后选择Properties。选择Compatibility 选项卡并检查底部附近的Run this program as administrator。现在,每当程序运行时,它都会在运行前要求提升权限。

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2013-07-24
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      相关资源
      最近更新 更多