2009-07-02 5 views
14

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

+0

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

+0

Można to zrobić za pośrednictwem JNA. Zobacz [to] (http://stackoverflow.com/questions/11041509/elevating-a-processbuilder-process-via-uac) – dARKpRINCE

Odpowiedz

8

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.

+1

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). –

+0

@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ć. –

+0

@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ń. –

3

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?

+2

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

+0

Interfejs API preferencji języka Java (na poziomie systemu) kończy się niepowodzeniem, jeśli funkcja Kontrola konta użytkownika jest włączona ... –

2

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

0

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.

0

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.