真正的方法是:

先用C/C++编写一个简单的CMD命令调用程序,调用的命32313133353236313431303231363533e59b9ee7ad9431333363373734令就是“java -jar YourJar.jar”,如果想运行效果更好,可以把启动时的CMD窗口隐藏,然后以管理员权限运行这个编译链接好的exe文件即可。核心思想就是:OS无法直接给运行Jar包Java虚拟机管理员权限,也无法通过直接右键Jar包以管理员权限运行因为Jar包不是PE文件,需要通过创建子进程间接地把管理员权限传递给Java虚拟机,从而运行的Jar包也就有了管理员权限。运行的Jar包有没有管理员权限看的是所运行的Java虚拟机有没有权限。示例代码://隐藏父窗口即CMD窗口看参考链接看原理

//只为了更好的运行效果
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#include 
int main() {
WinExec("java -jar MyExecutableJar.jar", SW_HIDE);
return 0;
}

然后把编译链接好的EXE文件放到“MyExecutableJar.jar”文件所在目录(“MyExecutableJar.jar”就是你的可执行Jar包,要获得管理员权限的),然后要以管理员权限运行Jar包时就右击编译链接好的EXE文件,选择使用管理员权限运行,之后运行的Jar包就继承了父进程的管理员权限。

测试结果:

java以管理员身份运行cmd命令行 java获取以管理员身份运行_java

以上是我写的需要使用管理员权限才能成功运行的Jar包,try11.exe是编译好链接好的exe文件,用来接受管理员权限并传递给java命令。我的Jar程序需要使用管理员权限开启WIFI和ICS,在运行前是这样子的:

java以管理员身份运行cmd命令行 java获取以管理员身份运行_java以管理员身份运行cmd命令行_02

以管理员身份运行try11.exe:

java以管理员身份运行cmd命令行 java获取以管理员身份运行_管理员权限_03

运行结果成功开启了WIFI和ICS:

java以管理员身份运行cmd命令行 java获取以管理员身份运行_管理员权限_04

Jar程序也运行起来了(只为了说明不是我手动开的WIFI和ICS,是真的以管理员权限运行的Jar包):

java以管理员身份运行cmd命令行 java获取以管理员身份运行_java_05