2012-04-19 12 views
5

Devo concedere i diritti di amministratore della mia applicazione, sapendo che verrà eseguita da una sessione utente e non da un account amministratore.Forzata l'applicazione per disporre dei privilegi di amministratore

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

ho provato a modificare il manifesto tra le altre cose e ci hanno inserito la linea:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

questo mi ha dato un errore quando si cerca di pubblicare tramite ClickOnce, ma non quando il debug.

Potete aiutarmi?

risposta

1

Sono abbastanza sicuro che questo comportamento è di progettazione.

Le applicazioni ClickOnce sono progettate per essere installabili senza i privilegi di amministratore. Non è possibile 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.

5

prima di tutto - anzi, non è consentito in base alla progettazione, da installare e ClickOnce app come amministratore: http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

un'occhiata a questo post: http://antscode.blogspot.ca/2011/02/running-clickonce-application-as.html - si spiega come eseguire ClickOnce app 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 logica, e incapsulare il pezzo è necessario essere fatto come amministratore in un file EXE separata - e mettere bene in chiaro per un utente che, quando si fa clic tale pulsante, UAC apparirà (probabilmente aggiungendo 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 è questo:

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

si esegue il file EXE con Admin destra - così pronta UAC sarà 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.

+0

e senza richiesta UAC? – Atoxis

+0

@Matth Ci dispiace, non sono chiaro sulla tua domanda. L'obiettivo è eseguire un codice SOME in modalità elevata. A meno che tu non sia un amministratore, hai bisogno di questo messaggio per elevare la tua app. – avs099

+0

Gli ingegneri che useranno questa applicazione sono un account utente sul computer. l'applicazione esegue il processo di prvilèges che richiede un amministratore. All'esterno è impensabile per motivi di sicurezza che venga fornito il proprio account amministratore. Voglio solo essere trasparente per l'utente. e lo stesso principio che ho già riusciti a Invoker processo senza UAC, grazie ai comandi p.StartInfo.UserName = "user" p.StartInfo.Password = "segreto" ma è che è visualizzato l'unica preoccupazione il mio prompt dei comandi . Mentre mi piace, viene eseguito in background. – Atoxis

Problemi correlati