展开全部

真正的方法是:

先用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包就继承了父进程的管理员权限。

测试结果:

6f5c0a68b16690e45d0b870571f1bf64.png

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

901efa64e37119b635988ba49b01f09d.png

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

ad46e618889f0608ad7d0da4ea8ace5d.png

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

9d8d494561ec40d8a999e2adf7aa1c94.png

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

e74a61e23eebf834e8d6ea6b2063e7ba.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐