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

Joã*_*lva 21 java windows administrator batch-file runas

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

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

elevate "c:\Program Files\Java\jre\bin\java.exe" -jar "%CD%\installer.jar"
Run Code Online (Sandbox Code Playgroud)

使用来自microsoft的提升脚本,我还创建了一个批处理文件

runas /user:Administrator myjar.jar
Run Code Online (Sandbox Code Playgroud)

但没有任何效果:\任何想法?先感谢您

小智 43

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

现在简单的步骤:

  1. 创建你的jar文件,如try2.jar,包含一些mainifest文件 - My1.mf就像always.So,jar文件的绝对路径是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的基本功能.但是这里不清楚如何为你的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>  
    
    Run Code Online (Sandbox Code Playgroud)

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

  1. 现在启动Launch4j,根据您的条件将所有教授的文本字段填入视频中.在Wrapper mainfest列中添加此文件清单文件.然后单击"保存配置"选项,然后单击"构建包装器".

现在你有一个包含你的jar的exe,它要求用户在执行之前给予管理员权限.现在,除了点击之外,用户不会知道任何其他内容

  • 很抱歉回到这么老的帖子,但有没有办法摆脱"未知的出版商",只要它要求管理员权限? (2认同)
  • 很好的答案.只是这样的管理员权限文件阻止它接受拖放事件.我无法在其GUI上删除文件. (2认同)

Ral*_*och 8

我在https://github.com/rritoch/super-user-application上的github上为这个问题创建了一个基于Java的通用解决方案.系统使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个库已经在linux和windows上测试过了,但也适用于Mac/OSX.此解决方案的主要缺点是它仅在应用程序作为jar执行时才起作用.当执行的jar没有管理员权限时,它需要以管理员权限重新执行jar.如果应用程序未从jar运行,则会抛出InvalidStateException.

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