2011-01-31 26 views
5

Actualmente estoy trabajando en un Lanzador de aplicaciones/Autoupdater. Para instalar/actualizar una aplicación en "Archivos de programa", necesito solicitar derechos de administrador.Privilegios de administrador para un único método

Bueno, como el actualizador solo necesita escribir algo si se encuentran nuevas versiones, intenté solo solicitar los privilegios, si se encuentra una nueva versión.

El proceso de actualización se ejecuta cada vez, antes de que se inicia la aplicación, por lo que pide "cada vez" para Adminrights hay solución ...

busqué mucho, y se encontró lo siguiente:

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

pero Cuando intento esto, el actualizador arroja una SecurityException ...

Falló la solicitud del permiso de principal.

¿Qué estoy haciendo mal?

Saludos, Dognose

Respuesta

3

No puede elevar los permisos de la aplicación una vez que se está ejecutando. Para solicitar el rol de Administradores, será necesario hacerlo en el momento del inicio del ejecutable.

Su mejor opción sería que su actualizador dispare un ejecutable diferente para hacer el InstallOrUpdate, o para volver a ejecutarlo (con un argumento de línea de comando diferente, potencialmente) con una solicitud de permisos elevados en ese punto.

+0

Cuando estoy haciendo cosas administrativas en Windows, veo botones en los formularios con el icono de administración junto a ellos. Cuando hago clic en el botón, UAC solicita privilegios elevados. ¿Estás diciendo que para cada botón administrativo, Windows está lanzando un nuevo proceso? ¿O algo diferente está sucediendo allí? – Phil

+0

@Phil: Sí. Básicamente, si ve un aviso de UAC, sabrá que se va a iniciar un nuevo proceso en ese punto. –

+0

@Phil, un buen ejemplo es el Administrador de tareas de Windows y el botón 'Mostrar procesos de todos los usuarios'. Hacer clic en esto no solo actualiza el Administrador de tareas, sino que lo relanza con permisos elevados. –

2

UAC elevación es por proceso, es decir, el proceso en su conjunto es elevada, no por un solo método. El mejor curso de acción sería crear un proceso de acción específico que requiera privilegios elevados e iniciar ese proceso desde su actualizador cuando realmente necesite algún trabajo. This might help.

Cuestiones relacionadas