2008-11-03 5 views
8

Java ProcessBuilder 클래스를 통해 작업 스케줄러에서 새 작업을 만들려고하면 Windows Vista에서 오류가 발생했습니다. XP에서는 잘 작동합니다. Windows Vista에서 Java 응용 프로그램에 대한 관리자 권한 요청

나는 그것뿐만 아니라 비스타에서 실행 "실행 adminstrator로"옵션을 사용

..

그러나 이것은 추가 단계는 사용자가 이것에 대해 알고하지 않을 수 있습니다 다시 쿼리입니다. 사용자가 앱 아이콘을 두 번 클릭하면 액세스가 거부되어 실패합니다. 내 질문에 어떻게 자바 응용 프로그램을 시작할 때 관리자 권한을 reuest 강제 수 있습니까?

답변

3

프로그래밍 방식으로 처리 할 수 ​​있는지 잘 모르겠습니다.

경로 : HKEY_CURRENT_USER \ SOFTWARE \ 마이크로 소프트 \ 윈도우 NT \ CurrentVersion을 \ Appcompatflags \ 레이어

키를 앱에 대한 설치 프로그램이있는 경우 관리자로 실행을 강제로 레지스트리 키를 추가 할 수 있습니다 : < < 전체 경로 >>을 exe

값 : RUNASADMIN

형식 : REG_SZ

+11

'javaw.exe'에 그 플래그를 설정하고 싶지 않습니다! – finnw

0

아직 최상의 해결책을 찾지 못했습니다. 그러나 나는 "James Van Huis"와 비교하여 다른 대안을 가지고있다. 대신 RUNASINVOKE를 사용하여 앱을 실행할 때마다 허용/거부 메시지가 표시되지 않아도됩니다.

참고 : 당신은 항상 당신이 launch4j를 사용하여 .exe로 Java 응용 프로그램을 포장 생각 해 봤나

22

를 해결하기 위해 노력하고 어떤 것을 관리해야? 이렇게하면 실행 파일에 "실행 수준"을 지정할 수있는 매니페스트 파일을 포함시킬 수 있습니다. 즉, 실행중인 응용 프로그램에 부여해야하는 권한을 제어하여 사용자가 직접 수동으로 권한을 요구하지 않고 OS에 "관리자로 실행"을 효과적으로 알립니다. 예를 들어

...

의 build.xml :

<target name="wrapMyApp" depends="myapp.jar"> 
     <launch4j configFile="myappConfig.xml" /> 
</target> 

myappConfig.xml :

<launch4jConfig> 
    <dontWrapJar>false</dontWrapJar> 
    <headerType>gui</headerType> 
    <jar>bin\myapp.jar</jar> 
    <outfile>bin\myapp.exe</outfile> 
    <priority>normal</priority> 
    <downloadUrl>http://java.com/download</downloadUrl> 
    <customProcName>true</customProcName> 
    <stayAlive>false</stayAlive> 
    <manifest>myapp.manifest</manifest> 
    <jre> 
    <path></path> 
    <minVersion>1.5.0</minVersion> 
    <maxVersion></maxVersion> 
    <jdkPreference>preferJre</jdkPreference> 
    </jre> 
</launch4jConfig> 

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> 

http://msdn.microsoft.com/en-us/library/bb756929.aspx를 참조하고, 쏘다 모드 정보는 4j 웹 사이트를 참조하십시오.

1

FreeCouch의 답변은 좋지만 몇 가지 문제에 직면했지만 다음에 다른 사람들에게 쉽게 혜택을 줄 수 있도록 여기에 올리려고 생각했습니다.

Java에서 관리자 권한을 얻으려면, 해결책을 찾은 한 Launch4J와 같은 프로그램을 사용하여 * .exe 안에 * .jar를 래핑하고 Manifest를 바인딩하십시오.

매니페스트 파일을 만들려면 메모장과 같은 텍스트 편집기를 열고이 줄을 붙여넣고 확장명과 함께 파일 이름과 함께 저장하십시오 (예 : myApplication.exe).매니페스트 래퍼 매니페스트 옵션에서이 파일을 추가 Basic 탭 Launch4J에서

<?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> 

.