2010-11-03 7 views
8

Tengo una función en mi aplicación que requiere derechos de administrador.Ventana emergente de los derechos de administrador en la aplicación C#

Lo que quiero es que cuando haga clic en el botón para ejecutar esa función, debería solicitar el nombre de usuario y la contraseña del administrador. (Inicie el cuadro de diálogo UAC. También muestre el icono en ese botón).

¿Es posible?

alt text

PD: Sé que con el lanzamiento de la aplicación con el administrador de la derecha al hacer modificaciones en el archivo de manifiesto.

También esta función es parte de un programa grande y no se puede transferir a un programa separado.

+0

Debe reiniciar su aplicación una vez que se haya otorgado el acceso total de administrador para que su aplicación pueda aprovechar los nuevos derechos. De ahí que @Rob haya sugerido que uses una aplicación separada. La mejor recomendación que puedo dar es que solicite derechos de acceso completos cuando la aplicación se lance inicialmente, si realmente la necesita. –

+0

Agradezco su sugerencia, pero nuestra aplicación puede incluso ser ejecutada por usuarios Invitados (que es un requisito) y solo a veces necesitamos derechos de administrador. – Raj

+0

@Raj Estoy seguro de que UAC no funciona así. Buena suerte :) –

Respuesta

4

La mejor manera de lograr esto es tener un ejecutable secundario que contenga el código que requiere derechos administrativos, que se manifiesta de forma adecuada. Cuando su aplicación necesita ejecutar el código que requiere derechos administrativos, llame a ese programa.

Por ejemplo:

MiPrograma.exe - no manifiesta
MyProgramElevated.exe - tiene un manifiesto que indica que requiere derechos de administrador

Cuando MyProgram.exe necesidades para llevar a cabo una acción tan elevado que ejecuta MyProgramElevated.exe , pasando parámetros de línea de comando que indican qué tarea elevada se requiere.

+0

Eso fue lo primero que quise hacer pero esta función es parte de un programa grande y no se puede transferir a un programa separado. – Raj

+1

@Raj, no conozco ninguna forma de obtener el token "completo" aparte de hacer lo que he sugerido. He agregado unas cuantas etiquetas más a tu pregunta para, ojalá, hacerlo más visible, ya que alguien más puede saber una solución que yo no tengo) – Rob

+0

Muchas gracias, Rob ... :) – Raj

5

Usted puede obtener utilizando el icono de la StockIcons.Shield Windows API Code Pack

Puede ejecutar un programa con privilegios de administrador sin cambiar el manifiesto programa usando el verbo "runas" (también se puede usar esto para volver a poner en marcha su programa con derechos de administrador):

Process.Start(new ProcessStartInfo() 
    { 
     Verb = "runas", 
     FileName = "Notepad.exe", 
    }); 

Hay una API COM que le permiten crear un objeto COM con derechos de administrador dentro de un proceso que no es administrador, pero yo creo que es muy difícil de usar esto desde una aplicación .NET.

Cuestiones relacionadas