Java로 설치 프로그램을 작성 중이므로 그에 따라 Program Files 디렉토리에 액세스하는 데 높은 권한이 필요합니다. 내가 권한을 확인하기 위해 사용하고 시험은 대답을 약간 수정 Windows에서 Java 응용 프로그램을 관리자로 실행하십시오.
public static void main(String args[]) {
if (!checkPrivileges()) { // spawn a copy w/ elevated privileges
Runtime runtime = Runtime.getRuntime();
try {
Process p = runtime.exec(
"runas /profile /user:Administrator \"java -cp . main.Main\"");
} catch (IOException e) { ... }
} else {
// Run with elevated privileges
}
}
가
here을 발견하고 다음과 같습니다
다음과 같이 내가 온라인으로 발견 한 것을 정보를 바탕으로, 나는 구현을 작성했습니다 : 예상대로 - -
private static boolean checkPrivileges() {
File testPriv = new File("C:\\Program Files\\");
if (!testPriv.canWrite()) return false;
File fileTest = null;
try {
fileTest = File.createTempFile("test", ".dll", testPriv);
} catch (IOException e) {
return false;
} finally {
if (fileTest != null)
fileTest.delete();
}
return true;
}
나는이 실행
, 그것은 권한 테스트를 실패하고 간부로 호출합니다.p.isAlive()
을보고 통화가 작동하는지 확인하면 프로세스가 실제로 살아 있음을 알 수 있습니다. 그러나 새 프로세스에 대한 어떠한 증거도 보이지 않으며 Windows에서 사용 권한을 부여하라는 메시지를 표시하지 않습니다.
저는 Java에서 exec()
을 사용하는 것에 익숙하지 않아 어떻게 든 사용법을 오해 한 것 같습니다. 그 문제에 관해서, 내가 여기서도 할 수있는 일이 가능한 것인가? 그렇지 않다면, 제가 찾고있는 결과를 실제로 얻을 수있는 직접적인 대안이 있습니까?
윈도우 8에서는'runas '를 사용하여 실제로 UAC 팝업을 불러 오지 않고 대신 stdin을 통해 입력 할 암호를 묻습니다. 명령 프롬프트 창에서'runas/profile/user : Administrator notepad'를 실행하십시오. 귀하의 문제를 설명 할 수 있습니다. – Pokechu22
실제로 여기에있는 것처럼 보입니다. 나는 이것이 단지 후속 질문으로 이어질 것이라고 생각한다 : Java로 UAC 팝업을 어떻게 불러올 수 있는가? 내 대상 플랫폼은 Windows 7입니다 (Windows 8 플랫폼에서 개발 중이지만). 이 코드가 해당 플랫폼에서 의도 한대로 작동합니까? – bionicOnion
한 가지 해결책은 Java 프로그램을 다시 시작하기 위해 C로 간단한 응용 프로그램을 작성하는 것입니다. 응용 프로그램 매니페스트에 응용 프로그램을 지정하여 Windows에 권한 상승이 필요하다고 알릴 수 있습니다. 그러나 Java로 직접 할 수있는 방법이있을 수 있습니다. 흥미로운 질문입니다. +1. –