Richiedere l'elevazione del controllo dell'account utente di Windows Vista se il percorso è protetto?

StackOverflow https://stackoverflow.com/questions/17533

Domanda

Per la mia app C#, non voglio richiedere sempre l'elevazione all'avvio dell'applicazione, ma se scelgono un percorso di output protetto dall'UAC, devo richiedere l'elevazione.

Quindi, come posso verificare se un percorso è protetto dall'UAC e come posso richiedere l'elevazione durante l'esecuzione?

È stato utile?

Soluzione

Il modo migliore per rilevare se non sono in grado di eseguire un'azione è tentarla e catturarla UnauthorizedAccessException.

Tuttavia come @Danny Puffo sottolinea correttamente puoi solo elevare un oggetto COM o un processo separato.

All'interno degli esempi di tecnologia incrociata di Windows SDK è disponibile un'applicazione dimostrativa denominata Dimostrazione dell'UAC.Questa applicazione dimostrativa mostra un metodo per eseguire azioni con un processo elevato.Viene inoltre illustrato come scoprire se un utente è attualmente un amministratore.

Altri suggerimenti

Per richiedere l'elevazione durante l'esecuzione è necessario:

  1. Utilizza un controllo COM con privilegi elevati, che visualizzerà un prompt
  2. Avvia un secondo processo con privilegi elevati dall'inizio.

In .NET attualmente non è possibile elevare un processo in esecuzione;devi fare una delle cose hackerate sopra, ma tutto ciò che fa è dare all'utente l'impressione che il processo corrente venga elevato.

L'unico modo che mi viene in mente per verificare se un percorso è UAC elevato è provare a scriverlo in modo banale mentre sei in uno stato non elevato, rilevare l'eccezione, elevare e riprovare.

Non sono sicuro che ti sia di aiuto, ma puoi dare un'occhiata a questo post del blog:

http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html

Potresti voler avvisare l'utente che il percorso è protetto e chiedergli di inviare il file in un'area "più sicura".In questo modo la tua app non avrà bisogno di elevazione.Sono sicuro che dipenda dai tuoi utenti e da cosa stai cercando di fare, tuttavia non penso che sia eccessivo far sapere gentilmente all'utente che non ti va di scaricare xyz nella cartella Windows/System32.

Se l'unità secondaria ha le proprie autorizzazioni per i file, ad esempio supponiamo che su di essa sia installata un'altra copia di Windows.Ti verrà richiesto.

Ti verrà inoltre richiesto se i file sono in uso, cosa che a volte si verifica se hai Windows Explorer aperto nella stessa directory e il file selezionato con un visualizzatore di file che ne mostra il contenuto...ci sono altre stranezze, ma generalmente ti viene chiesto il permesso del file se il file è in uso o è una directory sensibile.

Se esegui il loop di FolderBrowserDialog , assicurati di avvisare l'utente del motivo, in modo che non si arrabbi con la tua app.

Nota:fa schifo, non esiste un modo .net per chiedere il permesso, forse p/invocare l'API win32...?

L'UAC può elevare l'oggetto in base al loro GUID, questo significherebbe (in teoria) che qualsiasi classe con un GUID può essere elevata, UACDemo dovrebbe anche mostrare come farlo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top