[英]Java: run as administrator
Java中是否有辦法要求系統控制管理員功能。 當然沒有這樣做:右鍵單擊exe - >以管理員身份運行。
我想要的是來自UAC的框架,如Windows Vista或Windows 7。
或者我從jar中制作exe時要做一些設置?
您必須創建一個清單文件,指定您的應用程序需要管理員權限。 您可以在您的exe中包含清單或將其保存為單獨的文件(yourapp.exe.manifest)
最簡單的方法是使用包裝器啟動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文件必須在工作目錄示例中
你可以看到提升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.