有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

windows Java:以管理员身份运行

Java中是否有方法要求系统控制管理员功能。 当然不必这样做:右键单击exe->;以管理员身份运行
我想要的是有一个来自UAC的框架,就像在WindowsVista或Windows7中一样

或者在从jar生成exe时必须进行一些设置


共 (6) 个答案

  1. # 1 楼答案

    如果您可以从windows CMD批处理文件运行所需的任何内容。。 您可以从java应用程序中创建一个批处理文件(甚至是动态的),并启动它。 我让它工作,所以我的java程序启动它,它会弹出正常的windows UAC提示给用户,然后运行命令,如果他们选择是的话

        String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"};
        ProcessBuilder pb = new ProcessBuilder(commands);
        ..
        pb.start();
    

    下面是一个线程,用于处理在windows批处理文件中请求UAC访问: How to request Administrator access inside a batch file

    注: ProcessBuilder可能有点棘手,使用StreamGobbler来处理输出对我来说很有效: Handle Input using StreamGobbler

  2. # 2 楼答案

    最简单的方法是使用包装器启动JVM,然后提升包装器。我使用一个简单的NSIS安装程序脚本和UAC插件来实现这一点:

    ; Java Launcher
    ;--------------
    
    ; You want to change the below lines   
    Name "my program"   
    Caption "my program Launcher"    
    Icon "iconfile.ico"    
    OutFile "java launcher.exe"
    
    ; param below can be user, admin    
    RequestExecutionLevel admin
    
    !include UAC.nsh
    
    SilentInstall silent
    AutoCloseWindow true
    ShowInstDetails show
    
    Section ""    
      ; command to execute    
      StrCpy $0 'javaw -jar myjarfile'      
      SetOutPath $EXEDIR    
      Exec $0    
    SectionEnd
    
  3. # 4 楼答案

    如果您打算启动javaw,那么ZippyV的答案很好。如果纯java代码被UAC阻止(例如试图将文件写入特权目录),那么这就是您需要执行的操作

    但是,如果您试图启动外部的东西,但只是使用提升,您可以绑定一个提升命令的exeHere is one

  4. # 6 楼答案

    我将解释如何获得提升的java应用程序

    import java.io.IOException;
    
    public class RunAsAdminExample {
        public static void main(String[] args) throws IOException {
            Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process <program.exe> -verb RunAs");
        }
    }
    

    节目。exe是一个只需调用记事本的示例。exe

    import java.io.IOException;
    
    public class RunAsAdminExample {
        public static void main(String[] args) throws IOException {
            Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process notepad.exe -verb RunAs");
        }
    }
    

    比你有更高的计划。 我建议您-您需要转换为二进制包装器,如Launch4j或Parcel 如果创建自定义安装程序(由JavaSwing或Awt制作),则可以单击

    我希望您有好的解决方案:)-如果您使用Linux或Mac OS X,那么您需要使用Parcel二进制包装器或其他包装器,如果您知道

    //编辑Kaptkaos的好主意 比你写的简单:

    import java.io.IOException;
    
    public class RunAsAdminExample {
        public static void main(String[] args) throws IOException {
            Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process -FilePath java.exe -Argument '-jar runasadmin.jar' -verb RunAs");
        }
    }
    

    不要忘记使用启动进程的''""if-jar <filename>.jarfrom-参数。注意不要忘记——若使用工作目录和jar文件,则必须在工作目录示例中

    • 。\我的罐子。罐子
    • 爪哇。\RunAsAdminExample。阶级

    您可以看到带有参数的提升java:)

    致以最良好的祝愿