2011-01-31 12 views
5

Attualmente sto lavorando su ApplicationLauncher/Autoupdater. Quindi per installare/aggiornare un'app su "Programmi", ho bisogno di richiedere i diritti di amministratore.Privilegi di amministratore per un singolo metodo

Bene, dal momento che l'Updater deve solo scrivere qualcosa se vengono trovate nuove versioni, ho provato solo a richiedere i privilegi, se viene trovata una nuova versione.

Il programma di aggiornamento viene eseguito ogni volta, prima del lancio di applicazioni, in modo da chiedere "ogni volta" per Adminrights c'è soluzione ...

ho cercato molto, e hanno trovato la seguente:

[PrincipalPermission(SecurityAction.Demand, Role = @"Administrators")] 
    private void InstallOrUpdate(AppItem appItem) 

ma wenn provo a questo, l'updater genera SecurityException ...

Richiesta di autorizzazione principale non riuscita.

Cosa sto facendo di sbagliato?

saluti, Dognose

risposta

3

Non è possibile elevare le autorizzazioni per l'applicazione una volta che è in esecuzione. Per richiedere il ruolo degli amministratori, sarà necessario farlo all'avvio dell'eseguibile.

L'opzione migliore è quella di fare in modo che il programma di aggiornamento esegua un file eseguibile diverso per eseguire InstallOrUpdate oppure eseguirlo nuovamente (con un altro argomento della riga di comando, potenzialmente) con una richiesta di autorizzazioni elevate in quel punto.

+0

Quando eseguo operazioni amministrative in Windows, vedo i pulsanti nei moduli con l'icona amministrativa accanto a loro. Quando faccio clic sul pulsante, l'UAC richiede privilegi elevati. Stai dicendo che per ogni pulsante amministrativo Windows sta lanciando un nuovo processo? O sta succedendo qualcosa di diverso lì? – Phil

+0

@Phil: Sì. Fondamentalmente, se vedi un prompt UAC, sai che un nuovo processo verrà avviato a quel punto. –

+0

@Phil, un buon esempio è il Task Manager di Windows e il pulsante 'Mostra processi da tutti gli utenti'. Facendo clic su questo non si aggiorna solo il Task Manager, lo si riavvia con autorizzazioni elevate. –

2

UAC elevazione è per processo, cioè il processo nel suo insieme è elevata, non a singolo metodo. La migliore linea di azione, sarebbe quella di creare un processo di azione specifico che richiede privilegi elevati e avviare tale processo dal tuo programma di aggiornamento quando in realtà ha bisogno di fare un po 'di lavoro. This might help.

Problemi correlati