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);
}
}
上一篇: 异或最大值
下一篇: clojure-基本语法-集合(三)