windows - java getRuntime () .exec en exe, der kræver UAC

Indlæg af Hanne Mølgaard Plasc

Problem



Så vi har en java-proces, der kører som en windows service. Det skal udføre en kommando med Runtime.getRuntime().exec(command). Kommandoen den udfører kræver UAC. Dette er på Windows Server 2008 og lyder som om du ikke kan deaktivere UAC til en enkelt eksekverbar, så er der nogen anden måde at gøre dette arbejde på?

Bedste reference


Hvis din Java-applikation kører som en Windows-tjeneste, kører det højst sandsynligt under et af systemkonti: SYSTEM (mest sandsynlige), LOKAL SERVICE eller NETWORK SERVICE. Således, hvis tjenesten kører under SYSTEM-kontoen, vil alt, du starter fra tjenesten, arve kontoen. Alligevel skal din tjeneste have lov til at interagere med Desktop.


For at opsummere, hvis din proces løber som forhøjet, vil processer startet fra det også løbe højt.





For at hæve skal du bruge ShellExecute eller ShellExecuteEx funktioner i Windows API. Hvis den .exe du starter med er markeret med level=requireAdministrator i manifestet, viser skalen UAC-dialog. Hvis den ikke er markeret, kan du bruge runas verb/operation til at tvinge UAC-bekræftelsesdialog . Bemærk: runas i Windows XP vil du vise dialogboksen 'Kør som en anden bruger'. [8] [9]


Hvis Runtime.getRuntime().exec(command) implementeres via ShellExecute, vil markeringen af ​​.exe med passende manifest arbejde; hvis exec bruger CreateProcess, vil processen blive startet med nuværende brugerrettigheder, dvs. ikke forhøjet; desuden vil processen ikke blive startet overhovedet, hvis .exe har requireAdministrator i dets manifest. [10]