문제

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"
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top