以管理员身份运行Java文件,具有完全权限

时间:2013-09-26 19:47:23

标签: java windows batch-file administrator runas

我已经制作了一个Java应用程序,我在我的电脑和我的电脑上测试过,到目前为止一直很好...... 但是这个应用程序是我的另一个有迪斯科舞厅的朋友,当我在他的电脑上安装我的应用程序(Windows Vista 32位)它没有用,然后我去搜索和搜索,我发现问题是特权...我安装了一个32位vista和xp 32位的虚拟机来进行一些测试,我无法以完全管理员权限运行我的应用程序。

有没有办法创建批处理文件或允许我以所有权限运行我的应用程序的东西?我的意思是因为我需要连接到计算机的COM端口以从设备获取一些数据,我需要存储一些文件,因为我使用的是外部库,我可能需要一些我不知道的权限...我试过这个并没有任何作用:

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

使用microsoft的提升脚本,我还用

创建了一个批处理文件
runas /user:Administrator myjar.jar

但没有任何效果:\ 有任何想法吗?提前谢谢你

4 个答案:

答案 0 :(得分:41)

这个答案适用于那些愿意为他们的jar或java类提供管理权限的人。成功开发exe以编辑保存在admin中的文件。限制目录,我已经为您制定了这些步骤,希望这可以帮助您:     要了解的事情: 1)Jars不会直接使用权限进行编译,而是必须将它们与其他mainfest文件一起包装,以便最终能够在具有权限的Windows xp / vista /或更高版本上运行exe文件。实际上现在可能的答案是,在运行之前,exe强制用户提供管理员权限,这与之前的用户需要知道如何运行具有管理员权限且不友好的jar一样。

现在简单的步骤:

  1. 像try2.jar一样创建包含一些mainifest文件的jar文件 - My1.mf就像always.So,jar文件的绝对路径是C:\ try.jar。

    < / LI>
  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的基本功能。但是在这里不清楚如何为你的exe创建一个清单文件。

  4. 学完这个后,再创建一个清单文件,它是一个保存扩展名为“.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>  
    
  5. 将上述代码复制到清单文件中。这里第6行是整个问题的关键。然后保存并关闭它。

    1. 现在启动Launch4j,根据您的条件在视频中填写所有示教文本字段。在Wrapper mainfest列中添加此文件清单文件。然后单击“保存配置”选项,然后单击“构建包装器”。
    2. 现在你有一个包含你的jar的exe,它要求用户在执行之前给予管理员权限。现在,除了点击之外,用户不会知道任何其他内容!

答案 1 :(得分:7)

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

随意为此项目做出贡献。

答案 2 :(得分:2)

以管理员模式运行命令提示符。 更具体地说:

  1. 找到%windir%\system32\cmd.exe文件。
  2. 右键单击并run as administrator权限。

答案 3 :(得分:1)

使用Gradle

您也可以使用Gradle和launch4j plugin。从Ashium's answer的第3步开始,即使用

创建文件myapp.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>  

然后添加到您的build.gradle

plugins {
  id 'java'
  id 'edu.sc.seis.launch4j' version '2.4.3'
}

launch4j {
    mainClassName = 'com.mypackage.MainClass'
    icon = "$projectDir/icons/icon.ico"
    manifest = "$projectDir/myapp.manifest"
}