2009-09-06 37 views
37

관리자 기능을 제어 할 수있는 시스템을 Java에 요청하는 방법이 있습니까? 물론 수행하지 않고 : exe -> admin으로 마우스 오른쪽 버튼을 클릭하십시오.
내가 원하는 것은 Windows Vista 나 Windows 7과 같은 UAC의 프레임이 있다는 것입니다.Java : 관리자 권한으로 실행

아니면 jar에서 exe를 만드는 동안 몇 가지 설정을해야합니까?

답변

20

응용 프로그램에 관리자 권한이 필요하다는 것을 지정하는 매니페스트 파일을 만들어야합니다. 당신은 당신의 EXE 파일에 매니페스트를 포함하거나 별도의 파일로 유지할 수 있습니다 (yourapp.exe.manifest)

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

+8

물론 "실행 파일"은 사용자 코드가 아닌 JVM이됩니다. 매니페스트는 JVM에 적용되므로 해당 JVM에서 실행되는 모든 항목에 적용됩니다. – MSalters

+1

java를 실행하는 래퍼 exe를 가지고 있다면 어떨까요? 관리자 액세스 권한은 하위 프로세스 (jvm)에 의해 상속됩니까? – Cal

+3

@Cal - 예 - 프로세스가 승격되면 모든 프로세스가 생성됩니다. UAC 권한 상승은 응용 프로그램이 실행중인 사용자를 말 그대로 바꿔줍니다. 단방향 경로이므로 승격 할 수는 있지만 뒤로 물러 설 수는 없습니다. –

8

는 시스템 관리자 권한을 가진 javaw.exe가를 시작하려는 경우 ZippyV의 대답은 괜찮이다 순수 Java 코드가 UAC에 의해 차단되는 경우 (예 : 권한이 부여 된 디렉토리에 파일을 쓰려고 시도하는 경우), 그렇게해야합니다.

그러나 외부에서 무언가를 시작하려는 경우 권한 상승으로 명령을 수행하는 exe를 번들로 묶을 수 있습니다. Here is one.

+0

감사! 일반적으로 사용자 응용 프로그램이 관리자 권한으로 실행되는 것을 원하지 않으므로 대부분의 경우 더 적절한 해결책 일 수 있습니다. Elevate.exe에는 대기중인 명령이있을 때까지 차단할 수 있도록 대기 옵션이 있습니다. – rob

+0

링크를 올바르게 읽으면 항상 옵션이 아닌 레지스트리를 수정해야합니다. – likejiujitsu

9

가장 쉬운 방법은 다음, 당신의 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 
1

이 목적으로 Windows에서 명령 줄을 사용합니다. 시작 메뉴에서 cmd을 입력하고 프로그램 cmd.exe이 나타나면 마우스 오른쪽 버튼으로 클릭하고 관리자 권한으로 실행을 선택하십시오. 이제 실행하면 java -jar 관리자 권한으로 실행됩니다.

+0

그것은 나를위한 작품, 아주 간단한 솔루션 덕분에 –

-3

설치 폴더 내의 java.exe 및 javaw.exe에 액세스하십시오. ie - C : \ Program Files \ Java \ jre7 \ bin 또는 C : \ Program Files \ Java \ jdk1.7.0_17 \ bin 을 클릭하고 속성 -> 호환성을 선택하십시오 : "이 프로그램을 다음과 같이 실행하십시오. 관리자".

+2

그것은 모든 Java 프로그램 관리자 권한을 제공하므로 이것은 정말 나쁜 생각입니다. 맬웨어는 방금 키를 넘겨 줬기 때문에 시스템을 설치하기 위해 Java 구현의 보안 허점을 이용할 필요조차 없습니다. –

2

Windows CMD 배치 파일에서 실행해야하는 모든 것을 실행할 수 있다면 ... Java 응용 프로그램 내에서 배치 파일을 원하는대로 실행하고 실행할 수 있습니다. Java 프로그램을 실행하여 정상적인 창 UAC 프롬프트를 표시 한 다음 YES를 선택하면 명령을 실행합니다. 이 How to request Administrator access inside a batch file

참고 : ProcessBuilder를 출력 작업을 처리하는 StreamGobbler을 사용하여 처리 할 조금 까다로울 수있다 여기에

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

는 윈도우 배치 파일 내에서 UAC 액세스를 요청 다루는 스레드 나를 위해 : Handle Input using StreamGobbler

0

난 당신이 높은 자바 응용 프로그램을 얻는 방법을 설명 할 것이다

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 같은 바이너리 래퍼로 변환해야합니다 - (. 자바 스윙 또는 AWT에 의해) 사용자 지정 설치 프로그램을 만드는 경우

난 당신이 좋은 솔루션 :이 희망 - 당신이 만약 당신은 간단하게 쓰기보다 Kaptkaos 에 의해 ...

// EDIT 좋은 생각이 Parcle 진 래퍼 또는 당신이 알고있는 경우에 다른 래퍼를 사용하여 필요한 것보다 리눅스 또는 Mac OS의 X를 사용

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의 -Argument에서 -jar .jar을 사용하면 ''및 ""을 사용하십시오. 참고 잊지 마세요 - 당신이 디렉토리와 항아리 파일을 작업 사용하는 경우 디렉토리 예 작업에 있어야합니다 \ myjar.jar 자바 \ RunAsAdminExample.class 당신이 인수와 함께 높은 자바를 볼 수 있습니다보다 :)

안부를..!

관련 문제