以完全权限以pipe理员身份运行Java文件

我已经做了一个Java应用程序,我testing了我的电脑和我的铸造电脑,迄今为止这么好…但这个应用程序是我的另一个朋友有一个迪斯科,当我“安装”我的应用程序在他的电脑Windows Vista的32位)它没有工作,然后我去search和search,我发现,作为特权的问题…我安装了一个虚拟机的Vista 32位和XP 32位做一些testing,米无法运行我的应用程序具有完整的pipe理员权限。

有什么办法可以创build一个batch file,或者让我用所有权限运行我的应用程序? 我的意思是所有,因为我需要连接到计算机的COM端口从设备获取一些数据,我需要存储一些文件,因为我使用外部库,我可能需要一些我不知道的特权…我已经尝试过,没有任何工作:

elevate "c:\Program Files\Java\jre\bin\java.exe" -jar "%CD%\installer.jar" 

使用微软的升级脚本,我也创build了一个batch file

 runas /user:Administrator myjar.jar 

但没有工作:\任何想法? 先谢谢你

这个答案适用于那些正在为他们的jar或java类提供pipe理权限的人。 成功开发一个exe文件来编辑保存在admin中的文件。 限制目录,我已经开发了这些步骤来跟随你,希望这可以帮助你:事情要了解:1)jar不会直接编译与权限,而是你必须包裹他们与其他一些mainfest文件,以最终有EXE文件能够运行在Windows XP / Vista /或更高版本的权限。 实际上现在可能的答案是,在运行之前,exe会强制用户给予pipe理员权限,而不像以前那样,用户需要知道如何用不友好的pipe理员权限运行jar。

现在简单的步骤:1)像try2.jar一样创build包含一些mainifest文件的jar文件 – My1.mf,就像always一样。因此,jar文件的绝对path是C:\ try.jar。

2)现在你需要下载一个软件“Launch4j”,它将帮助你打包jar文件。它的下载链接是: http : //sourceforge.net/projects/launch4j/files/launch4j-3/3.1.0-beta2/

3)现在拿出5分钟。 并观看本教程: http : //www.youtube.com/watch ?v=mARUFRknTYQ;这将告诉你Launch4j的基本function。 但是这里不清楚如何为你的EXE创build一个清单文件。

3)学习完这个之后,创build一个清单文件,它是一个扩展名为“.manifest”的简单文本文件。 但是在这里需要注意一些事情:首先,你的mainfest文件必须和要创build的最终exe文件具有相同的名称。 在我的情况下,我的exe的名称应该是“Launchme.exe”,因此我的清单文件必须命名为“Launchme.manifest”。 其次,在清单文件只是复制这个内容:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="highestAvailable" uiAccess="False" /> </requestedPrivileges> </security> </trustInfo> </assembly> 

将上面的代码复制到清单文件中。 这里第6行是整个问题的关键。 然后保存并closures它。

4)现在启动Launch4j,根据您的条件填写video中的所有教学文本框。 在Wrapper mainfest列中添加这个文件清单文件。 然后点击“保存configuration”选项,然后点击“Build Wrapper”。

现在你有包含你的jar的exe文件,它要求用户在执行之前给予pipe理员权限。 现在,除了点击之外,用户不需要知道任何东西!

我在https://github.com/rritoch/super-user-application的; github上为这个问题创build了一个通用的基于Java的解决scheme。 系统使用JNA或Sudo来提供一个跨平台的Java应用程序(jar),它以pipe理员权限执行。 使用它的最简单的方法是让你的主类扩展抽象类SuperUserApplication,并从主函数中调用SU.run(new MyMain(),args),如下所示。

 package com.vnetpublishing.java; import com.vnetpublishing.java.suapp.SU; import com.vnetpublishing.java.suapp.SuperUserApplication; public class TestAdmin extends SuperUserApplication { public static void main(String[] args) { SU.run(new TestAdmin(), args); } public int run(String[] args) { System.out.println("RUN AS ADMIN! YAY!"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return 0; } } 

这个库已经在linux和windows上testing过了,但是也适用于Mac / OSX。 这个解决scheme的主要缺点是它只在应用程序作为jar执行时才起作用。 当执行的jar没有pipe理员权限时,需要用pipe理员权限重新执行jar。 如果应用程序没有从jar中运行,则会引发InvalidStateExceptionexception。

随意为这个项目做出贡献。

以pipe理员模式运行命令提示符。 更具体地说:1.find%windir%\ system32 \ cmd.exe文件。 2.右键单击并以pipe理员权限运行。