2013-09-26 99 views
19

我做了一个Java应用程序,我在我的电脑和我的杜撰的电脑进行了测试,到目前为止好...... 但这个应用程序是我的另一个朋友说,有一个迪斯科,当我“安装”我的应用程序在他的电脑(Windows Vista的32位)它没有工作,然后我去搜索和搜索,我发现,作为特权的问题...我安装了虚拟机32位和XP 32位做一些测试,我无法以完整的管理员权限运行我的应用程序。运行Java文件作为管理员拥有完全权限

有什么办法来创建一个批处理文件或东西,让我跑我的所有权限的应用程序?我的意思都是因为我需要连接到计算机的COM端口以从设备获取一些数据,并且我需要存储一些文件,并且由于我使用的是外部库,因此我可能需要一些我不知道的特权......我已经试过这一点,并没有什么作品:使用ELEVATE脚本从微软

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

,我也创建了

runas /user:Administrator myjar.jar 

,但没有一个批处理文件的工作:\ 任何想法?谢谢你提前

回答

35

这个答案是为那些谁也愿意和提供管理权限到他们的罐子或Java类。成功开发一个exe文件后,保存在admin中。受限目录,我已经开发了这些步骤,跟随你,希望这可以帮助你: 事物要了解: 1)罐不会与特权而直接编译,你必须与其他一些mainfest文件,最后将它们包装有exe文件能够运行在Windows XP/Vista /或更高版本的权限。实际上现在可能的答案是,在运行之前,exe会强制用户给予管理员权限,而不像以前那样,用户需要知道如何使用不友好的管理员权限运行jar。

现在简单的步骤:1)创建你的jar文件,如try2.jar包含一些mainifest文件 - My1.mf,就像always.So文件的绝对路径是C:\ try.jar 。

2)现在,你需要下载一个软件“Launch4j”,这将帮助你换罐子files.Its下载链接为:http://sourceforge.net/projects/launch4j/files/launch4j-3/3.1.0-beta2/

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

3)学习之后,再创建一个清单文件,它与扩展的简单文本文件“.manifest的”保存。但是在这里需要注意一些事情:首先,你的mainfest文件必须和你要创建的最终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行是整个问题的关键。然后保存并关闭它。

4)现在开始Launch4j,补全教文本框像视频按你的条件。在Wrapper mainfest列中添加这个文件清单文件。然后点击“保存配置”选项,然后点击 - Build Wrapper。

现在你已经有了包含你的jar的exe文件,它要求用户在执行之前给予管理员权限。现在,用户不需要知道点击以外的任何内容!

+0

虽然我没有测试你的答案,但看起来很有希望。感谢这样的答复。 –

+0

很好的答案!谢谢(+1) – Danielle

+2

对不起,回到这样一个旧的帖子,但有没有办法摆脱“未知发布者”,每当它要求管理员权限? – Maverick283

1

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

6

我已经在github上创建了一个基于Java的通用Java解决方案,它在https://github.com/rritoch/super-user-application上。该系统使用JNA或Sudo提供一个跨平台的Java应用程序(jar),该应用程序以管理员权限执行。使用它的最简单的方法是让你的主类扩展抽象类SuperUserApplication,并从你的main函数中调用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上测试过,但也应该适用于Mac/OSX。这个解决方案的主要缺点是它只在应用程序作为jar执行时才起作用。当执行的jar没有管理员权限时,它需要以管理员权限重新执行jar。如果应用程序未从jar中运行,则会引发InvalidStateException。

随时为此项目做出贡献。

+0

你刚刚建立了一个这样的jar文件,所以我可以快速将它添加到我在NetBeans中做的项目中?如果不是,你能解释一下如何在netbeans中编译这个文件吗?如果这是需求,我不想获得maven。 –

+0

只需从maven下载它http://mvnrepository.com/artifact/com.vnetpublishing.java/super-user-application/0.0.5 –