欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java如何获取管理员权限

程序员文章站 2022-07-14 14:37:22
...

java如何获取管理员权限

我们在工作中使用java操作一些系统文件夹或者一些注册表等会失败,因为没有管理员权限,无法访问。或者当把java程序打成exe或者jar包时,操作系统文件夹或注册表也会失败,除非以管理员方式启动才行。除了使用管理员方式启动外还有没有别的办法呢?有的

Java是没办法获取到管理员权限的,但是我们可以换个思路。java可以执行.bat文件,.bat文件是可以获取管理员权限的。那我们就可以把java中需要获取管理员的操作写到.bat脚本中。

例如,我最近需要把软件的快捷方式图标放入windows的开机自启目录中,这个操作是需要管理员权限的,那我就可以写一个.bat脚本(不会写的可以百度对应的命令,就是用cmd去操作文件或者注册表这种命令)
我是在程序运行时创建一个.bat文件,也可以提前写好,在程序中执行。.bat内容如下:

这段代码是固定的,必须放在.bat的开头,才能获取到管理员权限。

@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"

在加上这段代码,这段代码是将一个文件拷贝至另一个地方,可以在cmd执行确认没有问题后再写进去

xcopy "C:\Users\13025\Desktop\ceshi.lnk"  "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"

在java中调用即可,这时会有获取管理员权限的弹窗出来,点确定就可以了。

callCmd(".bat文件的路径");

private static void  callCmd(String locationCmd){
        StringBuilder sb = new StringBuilder();
        try {
            Process child = Runtime.getRuntime().exec(locationCmd);
            InputStream in = child.getInputStream();
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(in));
            String line;
            while((line=bufferedReader.readLine())!=null)
            {
                sb.append(line + "\n");
            }
            in.close();
            try {
                child.waitFor();
            } catch (InterruptedException e) {
                System.out.println(e);
            }
            System.out.println("sb:" + sb.toString());
            System.out.println("callCmd execute finished");
        } catch (IOException e) {
            System.out.println(e);
        }
    }