2010-11-03 2 views
8

Nella mia applicazione ho una funzione che richiede diritti di amministratore.popup di richiesta dei diritti di amministratore nell'applicazione C#

Quello che voglio è quando faccio clic sul pulsante per eseguire quella funzione, dovrebbe chiedere nome utente e password dell'amministratore. (Avvia la finestra di dialogo UAC. Mostra anche l'icona su quel pulsante.)

È possibile?

alt text

PS: So di lanciare l'applicazione con Admin destra facendo modifiche nel file manifesto.

Anche questa funzione fa parte di un programma di grandi dimensioni e non può essere trasferita a un programma separato.

+0

È necessario riavviare l'applicazione dopo che è stato concesso l'accesso amministrativo completo per consentire all'applicazione di usufruire dei nuovi diritti. Quindi perché @Rob ti ha suggerito di utilizzare un'app separata. La migliore raccomandazione che posso dare è che richiedi i diritti di accesso completo quando la tua applicazione si avvia inizialmente, se ne hai davvero bisogno. –

+0

Apprezzo il tuo suggerimento ma la nostra applicazione può essere persino eseguita dagli utenti Guest (che è un requisito) e solo a volte abbiamo bisogno dei diritti di amministratore. – Raj

+0

@Raj Sono sicuro che UAC non funziona così. Buona fortuna :) –

risposta

4

Il modo migliore per ottenere ciò è disporre di un eseguibile secondario che contenga il codice che richiede diritti amministrativi, che viene manifestato in modo appropriato. Quando l'applicazione deve eseguire il codice che richiede diritti amministrativi, chiamare quel programma.

Ad esempio:

MyProgram.exe - non manifesta
MyProgramElevated.exe - ha un manifesto che indica che richiede diritti di amministratore

Quando MyProgram.exe deve eseguire un'azione come elevato è esegue MyProgramElevated.exe , passando i parametri della riga di comando che indicano quale compito elevato è richiesto.

+0

Questa è stata la prima cosa che volevo fare ma questa funzione fa parte di un grande programma e non può essere trasferita a un programma separato. – Raj

+1

@Raj, non sono a conoscenza di alcun modo per ottenere il token "completo" diverso da quello che ho suggerito. Ho aggiunto qualche altro tag alla tua domanda per renderlo più visibile, visto che qualcun altro potrebbe conoscere una soluzione che non lo so =) – Rob

+0

Grazie mille Rob .. :) – Raj

5

È possibile ottenere l'icona usando StockIcons.Shield dal Windows API Code Pack

È possibile eseguire un programma con privilegi di amministratore senza cambiare il manifesto programma utilizzando il verbo "runas" (è anche possibile utilizzare questo per ri-lanciare la vostra programma con diritti di amministratore):

Process.Start(new ProcessStartInfo() 
    { 
     Verb = "runas", 
     FileName = "Notepad.exe", 
    }); 

V'è un'API COM che consentono di creare un oggetto COM con diritti di amministratore all'interno di un processo non-admin, ma credo che sia molto difficile da usare questo da un'applicazione .NET.