簡體   English   中英

Java:以管理員身份運行

[英]Java: run as administrator

Java中是否有辦法要求系統控制管理員功能。 當然沒有這樣做:右鍵單擊exe - >以管理員身份運行。
我想要的是來自UAC的框架,如Windows Vista或Windows 7。

或者我從jar中制作exe時要做一些設置?

您必須創建一個清單文件,指定您的應用程序需要管理員權限。 您可以在您的exe中包含清單或將其保存為單獨的文件(yourapp.exe.manifest)

http://msdn.microsoft.com/en-us/library/bb756929.aspx

最簡單的方法是使用包裝器啟動JVM,然后提升包裝器。 我使用UAC插件的簡單NSIS安裝程序腳本來執行此操作:

; Java Launcher
;--------------

; You want to change the below lines   
Name "my program"   
Caption "my program Launcher"    
Icon "iconfile.ico"    
OutFile "java launcher.exe"

; param below can be user, admin    
RequestExecutionLevel admin

!include UAC.nsh

SilentInstall silent
AutoCloseWindow true
ShowInstDetails show

Section ""    
  ; command to execute    
  StrCpy $0 'javaw -jar myjarfile'      
  SetOutPath $EXEDIR    
  Exec $0    
SectionEnd

ZippyV的答案很好,如果您打算啟動具有系統管理員權限的javaw.exe,如果純Java代碼被UAC阻止(例如嘗試將文件寫入特權目錄),那么這就是你的意思需要做的。

但是,如果您嘗試在外部啟動某些內容,但只是提升,則可以捆綁提升命令的exe。 這是一個

您可以使用Windows程序來提升您的權限。 程序將顯示UAC提示符,然后您將擁有管理員權限。

http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/

然后你可以運行這樣的命令:

Runtime.getRuntime().exec("Elevate.exe yourcommand");

如果您可以運行從Windows CMD批處理文件運行所需的任何內容..您可以在Java應用程序中創建一個批處理文件(即時運行),它可以執行您想要的操作並啟動它。 我有它的工作,所以我的java程序啟動它,它彈出正常的Windows UAC提示給用戶,然后運行命令,如果他們選擇是。

    String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"};
    ProcessBuilder pb = new ProcessBuilder(commands);
    ..
    pb.start();

這是一個處理在Windows批處理文件中請求UAC訪問的線程: 如何在批處理文件中請求管理員訪問

注意:ProcessBuilder可能有點難以處理,使用StreamGobbler來處理輸出對我有用使用StreamGobbler處理輸入

為此,我在Windows上使用命令行。 在“開始”菜單中,在文本框中鍵入cmd ,當程序cmd.exe出現時,右鍵單擊它並選擇“以管理員身份運行”。 現在,當您執行java -jar時,它將以管理員權限運行。

我將解釋如何獲得提升的java應用程序

import java.io.IOException;

public class RunAsAdminExample {
    public static void main(String[] args) throws IOException {
        Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process <program.exe> -verb RunAs");
    }
}

program.exe就是調用notepad.exe的例子

import java.io.IOException;

public class RunAsAdminExample {
    public static void main(String[] args) throws IOException {
        Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process notepad.exe -verb RunAs");
    }
}

比你有提升的計划。 我推薦你 - 你需要轉換為像Launch4j或Parcle這樣的二進制包裝器你可以單擊 - 如果你創建自定義安裝程序(由Java Swing或Awt制作)

我希望你有很好的解決方案:) - 如果你使用Linux或Mac OS X,你需要使用Parcle二進制包裝器或其他包裝器,如果你知道...

//編寫Kaptkaos的好主意而不是簡單地寫一下:

import java.io.IOException;

public class RunAsAdminExample {
    public static void main(String[] args) throws IOException {
        Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process -FilePath java.exe -Argument '-jar runasadmin.jar' -verb RunAs");
    }
}

如果-jar <filename>.jar來自-Argument of Start-Process,請不要忘記使用''"" 注意不要忘記 - 如果使用工作目錄,則jar文件必須在工作目錄示例中

  • \\ myjar.jar
  • java。\\ RunAsAdminExample.class

你可以看到提升java與參數:)

最好的祝福!

訪問安裝文件夾中的java.exe和javaw.exe。 ie - C:\\ Program Files \\ Java \\ jre7 \\ bin或C:\\ Program Files \\ Java \\ jdk1.7.0_17 \\ bin左鍵單擊它們並選擇properties-> compatability,然后:選中“以管理員身份運行該程序”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM