【问题标题】:Run Java file as Administrator with full privileges以具有完全权限的管理员身份运行 Java 文件
【发布时间】:2013-10-02 23:00:37
【问题描述】:

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

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

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

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

runas /user:Administrator myjar.jar

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

【问题讨论】:

    标签: java windows batch-file administrator runas


    【解决方案1】:

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

    现在简单的步骤:

    1. 创建您的 jar 文件,例如 try2.jar,其中包含一些 mainifest 文件 -- My1.mf 一如既往。因此,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>  
      

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

    1. 现在启动 Launch4j,根据您的条件填写所有教学文本字段,就像在视频中一样。在 Wrapper mainfest 列中添加此文件清单文件。然后点击“保存配置”选项,然后点击--Build Wrapper。

    现在你有一个包含你的 jar 的 exe,它要求用户在执行之前给予管理员权限。现在用户除了点击之外什么都不知道!

    【讨论】:

    • 很抱歉回到这么老的帖子,但有没有办法在它要求管理员权限时摆脱“未知发布者”?
    • 不错的答案。只是这样的管理员权限文件阻止它接受拖放事件。我无法在它的 GUI 上放置文件。
    • @Brad 可能是 uiAccess 标志吗?我将对此进行测试并尝试将其设置为 true
    • 赞一个。但 MANIFEST 与 exe 同名并不是强制性的。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我已经在 github https://github.com/rritoch/super-user-application 上为这个问题创建了一个通用的基于 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。

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

      【讨论】:

      • 您是否已经构建了一个 jar 文件,以便我可以快速将其添加到我在 netbeans 中进行的项目中?如果没有,你能解释一下如何在netbeans中编译它吗?如果这是必需的,我不想获得 Maven。
      【解决方案4】:

      使用 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"
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-26
        • 2016-10-06
        • 1970-01-01
        • 2011-05-11
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        相关资源
        最近更新 更多