Windows Vista에서 Java 앱에 대한 관리자 권한을 요청하십시오
-
06-07-2019 - |
문제
Java ProcessBuilder 클래스를 통해 작업 스케줄러에서 새 작업을 만들려고하면 Windows Vista에 대한 액세스 거부 오류가 발생합니다. XP에서는 잘 작동합니다.
"Adminstrator로 실행"옵션을 사용하면 Vista에서도 실행됩니다.
그러나 이것은 사용자가 이것에 대해 알지 못하는 추가 단계입니다. 사용자가 앱 아이콘을 두 번 클릭하면 액세스 거부로 실패합니다. 내 질문은 시작 직후 Java 앱을 어떻게 관리자 권한을 강제로 강제로 강요 할 수 있습니까?
해결책
프로그래밍 방식으로 할 수 있는지 잘 모르겠습니다. 앱의 설치 프로그램이있는 경우 레지스트리 키를 추가하여 강제 실행을 관리자로 추가 할 수 있습니다.
경로 : hkey_current_user 소프트웨어 microsoft windows nt currentversion appcompatflags layers
키 : << exe의 전체 경로 >>
가치 : Runasadmin
유형 : reg_sz
다른 팁
런치 4J를 사용하여 .exe에서 Java 응용 프로그램을 포장하는 것을 고려 했습니까? 이렇게하면 실행 파일의 "실행 레벨"을 지정할 수있는 매니페스트 파일을 포함시킬 수 있습니다. 다시 말해, 귀하는 실행중인 응용 프로그램에 부여되어야하는 권한을 제어하여 OS가 수동으로 수동으로 수행하지 않고 "Adminstrator로 실행"하도록 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 모드 세부 사항은 Launch4J 웹 사이트입니다.
Freecouch의 대답은 좋지만 나는 약간의 문제에 직면했고 다음에 다른 사람들이 쉽게 혜택을받을 수 있다고 생각했습니다.
Java에서 관리자 권한을 얻으려면 솔루션이 *.jar를 a *.exe 내부에 랩핑하고 Binding Manifest와 같은 프로그램으로 래핑하는 것입니다.
매니페스트 파일을 만들려면 메모장과 같은 텍스트 편집기를 열고이 줄에 붙여 넣고 파일 이름으로 저장하십시오. myApplication.exe.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>
런치 4J에서 Basic
탭 래퍼 매니페스트 옵션 에이 파일을 추가하십시오.
아직 최고의 솔루션을 찾지 못했습니다. 그러나 나는 "James Van Huis"와 비교하여 대체 작업을 가지고 있습니다. 대신 runasinvoke를 사용하여 앱을 실행할 때마다 프롬프트 허용/거부를 볼 필요가 없습니다.
참고 : 당신은 항상 관리해야합니다.
Launch4J Gradle 플러그인 사용
특히 이미 Gradle을 사용할 때는 쉽게 적용 할 수 있습니다. Launch4J 플러그인 이것을 고치려면.
에서와 같이 FreeCouch '답변, 파일을 만듭니다 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>
그런 다음 Gradle 플러그인을 추가하여 적용하십시오 build.gradle
plugins {
id 'java'
id 'edu.sc.seis.launch4j' version '2.4.3'
}
launch4j {
mainClassName = 'com.mypackage.MainClass'
icon = "$projectDir/icons/icon.ico"
manifest = "$projectDir/myapp.manifest"
}
또는 Kotlin Gradle DSL을 사용하는 경우 build.gradle.kts
:
plugins {
application
kotlin("jvm") version "1.2.31"
java
id("edu.sc.seis.launch4j") version "2.4.3"
}
launch4j {
mainClassName = "com.mypackage.MainKt"
icon = "$projectDir/icons/icon.ico"
manifest = "$projectDir/myapp.manifest"
}