Windows: Kører privilegeret kommando fra ikke-privilegeret ved hjælp af CMD (eller Java)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil have en tjeneste, der kører som administrator og lytter på en havn. Mit GUI-program vil tale med administratortjenesten for de elementer, der kræver administratorrettigheder.


Hvis tjenesten endnu ikke kører, skal jeg starte den. Hvordan kan jeg få mit GUI-program til at køre en kommando som administrator? Jeg antager, at brugeren bliver spurgt, om de vil fortsætte.


Jeg håber der er noget, jeg kunne skrive i et CMD-vindue, fordi det passer fint ind i mit Java-program. Jeg tænker på noget som run-as-admin javaw my-service.jar hvor run-as-admin er kommandoen, der spørger om at fortsætte eller ej.

Bedste reference


Du kan ikke udføre en batchfil som administrator. Du skal oprette en genvej til den fil og derefter indstille flagmet i genvejen 'Udfør som administrator', hvis dette virkelig er det, du vil gøre.


For at gøre dette fra skrivebordet skal du vælge genvejen, højreklik og Egenskaber-> Genvej faneblad-> Avanceret knap. Marker derefter afkrydsningsfeltet Udfør som administrator.


For at gøre dette programmatisk, se Sådan indstilles 'Kør som administrator' -flag i genvejen oprettet af MSI-installatør

Andre referencer 1


Windows indeholder værktøjet 'runas', som kan bruges til at starte en eksekverbar med en anden brugerkonto.


På kommandolinjen vil du så bruge:


runas /user:Administrator "javaw -jar my-service.jar"


Den eneste ulempe er, at du skal indtaste adgangskoden, du kan ikke levere adgangskoden som et argument til runas-kommandoen

Andre referencer 2


Vi bruger Wrapper biblioteket til dette:
http://sourceforge.net/projects/wrapper/[7]


Den officielle hjemmeside ser ud til at lide af dynamiske dns-problemer for øjeblikket, så her er vejledningsarkivversionen. [8] [9]


Fra kommandolinjen (og ved udvidelse, Java) kan du installere, afinstallere, starte og stoppe dit Java-program som en tjeneste.

Andre referencer 3


Du har et problem her. Non admin-processer kan ikke starte tjenester. Den allerbedste ting at gøre er at arrangere, at tjenesten starter automatisk. Jeg anbefaler stærkt, at du tager den rute.


Hvad du tænker på, ville indebære at oprette en hjælperapplikation, der indeholder UAC-manifestet med requestedExecutionLevel indstillet til requireAdministrator. Denne hjælperapp kan derefter starte tjenesten. Problemet med dette er, at det kræver, at den logget bruger er i administratorpruppen, som du ikke kan garantere, vil være tilfældet. [10]


Alt i alt er det at foretrække at starte tjenesten automatisk.