Czy można prosić o podwyższone uprawnienia z poziomu aplikacji Java? Sugestie, które widziałem, koncentrują się wokół uruchamiania zewnętrznego pliku wykonywalnego lub konfigurowania manifestu, który żąda przywilejów podczas uruchamiania. Nie są one dostępne na przykład dla apletów. Czy istnieje sposób na żądanie podniesienia poziomu z działającej aplikacji?UAC i Java
Odpowiedz
UAC nie jest czymś, o co może prosić uruchomiony proces (nie ma znaczenia, w jakim języku się pracuje). Musisz poprosić o podniesienie w czasie uruchamiania.
Sposób, w jaki większość aplikacji Windowsa radzi sobie z tym (i sprawia, że wygląda tak, jakby żądał podniesienia), polega na odradzaniu dodatkowej kopii, żądaniu podniesienia i przekazywaniu argumentów z linii poleceń do nowego procesu, aby można wyświetlić odpowiednie okno dialogowe.
Oto dlaczego uniesienie UAC w oknie dialogowym jest zawsze inicjowane przez kliknięcie przycisku, które otwiera nowe okno dialogowe.
Tak więc, w świecie Java, po prostu trzeba zrobić dokładnie to, co wszyscy mają do zrobienia: uruchom ponownie aplikację, żądając podniesienia. Istnieje kilka sposobów na podniesienie poziomu, a "run as" jest prawdopodobnie najłatwiejszym.
Więcej szczegółów na temat żądania podniesienia poziomu. Pozbywam się Google'a, a próba użycia "runas" po prostu się nie udaje (szuka hasła z CLI zamiast otwierania okna dialogowego). –
@Brian - czy to pomaga? http://stackoverflow.com/questions/1797695/how-to-runlaunch-elevated-command-promt-programmiticaly-in-vista - jeśli nie, utwórz nowe pytanie za pomocą kodu, którego używasz, i opublikuj link do tego komentarza wątek i zobaczę, jaką pomoc mogę zaoferować. –
@Kevin Nie boję się. Nie używam .Net, używam Java.Ponadto już robię równoważnik Java tego. Mogę uruchomić wszystko, co chcę, na tym samym poziomie, ale kiedy próbuję eskalować to w ten sposób z mojej aplikacji, po prostu odskakuje natychmiast bez błędu i bez robienia czegokolwiek. Z linii poleceń wyświetla monit o podanie hasła linii poleceń. –
Wygląda na to, że firma Sun będzie musiała poradzić sobie z taką sytuacją w środowisku JRE, ponieważ nie ma innego sposobu wykonywania podwyższonych czynności niż uruchomienie procesu zewnętrznego.
Jeśli JRE to obsługuje, JVM prawdopodobnie musiałby uruchomić oddzielny, podniesiony proces dla kodu Java żądającego podwyższenia.
Na razie jednak tylko manifest lub uruchomienie zewnętrznej aplikacji są jedynymi dostępnymi rozwiązaniami, o ile wiem.
Pytanie brzmi: do czego potrzebne jest podniesienie wysokości?
W przeszłości mogliśmy używać podpisanych apletów do instalowania i ładowania niektórych natywnych kodów. Nie jest to już możliwe w systemie Vista z włączonym UAC, mimo że model zabezpieczeń Java pozwala na to. – joegester
Interfejs API preferencji języka Java (na poziomie systemu) kończy się niepowodzeniem, jeśli funkcja Kontrola konta użytkownika jest włączona ... –
Do tego celu należy użyć zewnętrznej (natywnej) aplikacji. Ten post dostarcza kodu źródłowego i wielkiego wyjaśnienia: UAC Prompt From Java
Możesz użyć jna i zrobić ShellExec. Dla lpOperation użyj "runas" (nie jest to udokumentowane). Ponieważ prawdopodobnie potrzebujesz pełnej ścieżki do (obecnej) JavaVM, która jest przechowywana w rejestrze pod adresem registry access, część JNA.
Przejdź do folderu, w którym jest zainstalowany java. otwórz właściwości javaw.exe/java.exe i ustaw opcję "uruchom jako administrator" true.
- 1. Zapobieganie wirtualizacji UAC?
- 2. Windows UAC Dialog
- 3. Podnoszenie procesu ProcessBuilder przez UAC?
- 4. Dodaj osłonę UAC do przycisku i zachowaj jego obraz tła?
- 5. CreateDesktop() z vista i UAC na (C, Windows)
- 6. Komunikat ostrzegawczy systemu Windows 7 UAC powoduje
- 7. Vista UAC - dyski sieciowe odwzorowujące problemy
- 8. Process.Start nigdy nie wraca, gdy UAC odmówiono
- 9. Ustawianie pola UAC "Wydawca" dla instalatora NSIS
- 10. Jak zmienić ikonę w znaku UAC podpisanego instalatora (WiX)?
- 11. Prawidłowy sposób postępowania z UAC w języku C#
- 12. Ustaw UAC jako opcjonalny w Instalatorze Windows na Vista
- 13. Czy mogę zatrzymać plik wykonywalny z żądaniem podniesienia UAC?
- 14. Java: Instanceof i Generics
- 15. Java generics i JNI
- 16. Valgrind i Java
- 17. Serwer Java i socket.io
- 18. rodzajowych Java i dziedziczenie
- 19. Java: Czcionki i piksele
- 20. Tablice Java i PostgreSQL
- 21. Java - compareTo i operatorzy
- 22. MathML i Java
- 23. Java - readObject() i setSoTimeout()
- 24. Java: Gson i kodowanie
- 25. Pakiety i klasy Java
- 26. Java: getMinutes i getHours
- 27. Java, Assertions i JIT
- 28. Java Seralization i Deseralization
- 29. Java: Tablice i wektory
- 30. JAVA: FileInputStream i FileOutputStream
Zobacz http://stackoverflow.com/questions/1385866/java-run-as-administrator/1385901#1385901, który sugeruje użycie narzędzia Elevate.exe do uruchomienia osobnego podwyższonego procesu w celu wykonania uprzywilejowanych działań. – rob
Można to zrobić za pośrednictwem JNA. Zobacz [to] (http://stackoverflow.com/questions/11041509/elevating-a-processbuilder-process-via-uac) – dARKpRINCE