2009-09-06 290 views
37

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

或者我是否在從jar中製作exe時做了一些設置?

回答

20

您必須創建一個清單文件,指定您的應用程序需要管理員權限。您可以包括體現在你的EXE或保持它作爲一個單獨的文件(yourapp.exe.manifest)

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

+8

問題當然是,「可執行」將是JVM,而不是您自己的代碼。由於清單適用於JVM,因此它適用於由該JVM運行的任何內容。 – MSalters 2009-09-08 10:59:18

+1

如果你有一個啓動java的包裝exe文件?管理員訪問權是否會被子進程(jvm)繼承? – Cal 2009-10-22 03:01:03

+3

@Cal - 是 - 一旦進程被提升,它創建的所有進程都將被提升。 UAC提升字面上會更改應用程序運行的用戶,並且它是單向街道 - 您可以提升,但不能降低。 – 2011-01-12 04:32:14

8

ZippyV的回答是好的,如果你打算推出具有系統管理員權限的javaw.exe的這如果純Java代碼被UAC阻塞(例如試圖將文件寫入特權目錄),那麼這就是您需要執行的操作。

但是,如果您嘗試啓動外部的某些內容,但僅使用高程,則可以將提升命令的exe捆綁在一起。 Here is one

+0

謝謝!您通常不希望用戶應用程序以管理員身份運行(僅限某些特權操作),因此在大多數情況下這可能是更合適的解決方案。我也喜歡Elevate.exe有一個-wait選項,所以你可以阻止,直到提升命令完成。 – rob 2011-01-14 20:33:05

+0

如果我正確地讀取了你的鏈接,還必須修改註冊表,這可能並不總是一個選項。 – likejiujitsu 2013-08-13 15:55:01

9

最簡單的方法是使用一個包裝,推出你的JVM,然後提升包裝。我使用一個簡單的NSIS安裝程序腳本和UAC插件來執行此操作:

; 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 
1

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

+0

這對我很有用,感謝非常簡單的解決方案 – 2014-11-24 08:52:43

-3

訪問安裝文件夾內的java.exe和javaw.exe。 ie - C:\ Program Files \ Java \ jre7 \ bin或C:\ Program Files \ Java \ jdk1.7.0_17 \ bin 左鍵單擊它們並選擇properties-> compatability,然後: 選中「run this program as管理員」。

+2

這是一個非常糟糕的主意,因爲它賦予了_every_ Java程序管理員權限。惡意軟件甚至不需要利用Java實施中的安全漏洞來打開系統,就像剛剛移交密鑰一樣。 – 2015-09-28 12:49:46

2

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

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

這裏是一個線程與請求Windows批處理文件中的UAC訪問涉及: How to request Administrator access inside a batch file

注: 的ProcessBuilder可以是一個有點棘手,處理,使用StreamGobbler處理輸出工作對我來說: Handle Input using StreamGobbler

0

我將解釋如何得到提升的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"); 
    } 
} 

不要忘了使用''和'「如果從-Start-Process的參數-jar .jar。注意:不要忘記 - 如果你使用的工作目錄和JAR文件必須在工作目錄例如 \ myjar.jar 的java \ RunAsAdminExample.class 比你看到高架用java的說法:)

最好的問候。!

相關問題