Costretto l’applicazione ad avere i privilegi di amministratore

Devo concedere i diritti di amministratore dell’applicazione, sapendo che verrà eseguito da una sessione utente e non da un account amministratore.

Ho cercato su altri siti, ma non riesco a trovare nulla che aiuti.

Ho provato a modificare il manifest tra le altre cose e ho inserito la riga:

 

Questo mi ha dato un errore quando provavo a pubblicare usando ClickOnce, ma non quando eseguivo il debug.

Mi potete aiutare?

prima di tutto – infatti, non è consentito dalla progettazione, da installare e dall’app ClickOnce come amministratore: http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

dai un’occhiata a questo post: http://antscode.blogspot.ca/2011/02/running-clickonce-application-as.html – spiega come eseguire l’app ClickOnce come amministratore. MA – devo dire che ho percorso questa strada – e non ho avuto molta fortuna con essa. Ho avuto numerosi problemi con questo approccio (cercando di eseguire l’app ClickOnce con i privilegi di amministratore). Per quanto ricordo, il problema principale era che l’aggiornamento automatico non funzionava correttamente. Per non parlare del fatto che gli utenti non amministratori potrebbero dover inserire le credenziali di amministratore tutto il tempo.

Quindi il mio consiglio sarebbe quello di ripensare la tua logica, e incapsulare il pezzo che devi fare come amministratore in un file EXE separato – e rendere molto chiaro per un utente che quando fa clic su quel pulsante, verrà visualizzato il prompt UAC (probabilmente da aggiungere l’icona “scudo” al pulsante). E in quell’evento button_click fai qualcosa del genere:

 // 2. Run Photoshop action on this image (and wait for the task to complete) if (string.IsNullOrWhiteSpace(this.PhotoshopEnhanceActionAbsPath) == false) { var pi = new ProcessStartInfo(this.PhotoshopEnhanceActionAbsPath, "\"" + imgPhotoshopActionAbsPath + "\""); pi.UseShellExecute = true; pi.Verb = "runas"; var photoshopAction = Process.Start(pi); var success = photoshopAction.WaitForExit(); if (success == false) { // do something here } } 

questo approccio ha funzionato molto bene per me. La chiave qui è questa:

 pi.UseShellExecute = true; pi.Verb = "runas"; 

esegue il tuo EXE con admin right – quindi il prompt UAC verrà visualizzato in quel momento. Un’altra bella conseguenza è che gli utenti potrebbero non eseguire questa particolare logica ogni volta che usano l’app – e quindi non saranno infastiditi dal prompt quando non ne hanno bisogno.

Sono abbastanza sicuro che questo comportamento sia di progettazione.

ClickTutte le app sono progettate per essere installabili senza i privilegi di amministratore. Non è ansible elevarli a runtime poiché ciò significa che un utente che non ha diritti di amministratore può installare in modo efficace quindi eseguire l’app come amministratore; questo sarebbe un rischio per la sicurezza.