2010-01-07 26 views
61

¿Es posible solicitar derechos de administrador para un solo método?Derechos de administrador para un solo método

Algo como esto:

[RequireAdminRightsForThisMethod()] 

private void TheMethod(){ 

    // Do something 

} 
+0

¿Qué le gustaría que hiciera? – SLaks

+1

Solo una nota: si alguien le da una respuesta con WindowsIdentity.GetCurrent() o similar, esto solo funcionará para winforms fuera del bate, no páginas web. – diadem

+0

Quiero que el UAC de incendios solicite permisos cuando las aplicaciones ejecutan un método. – lluismontero

Respuesta

83

se puede añadir un atributo PrincipalPermission a su método para exigir privilegios administrativos para su ejecución:

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")] 
public void MyMethod() 
{ 
} 

Esto se describe con más detalle en el siguiente artículo:

Security Principles and Local Admin Rights in C# .Net

Si buscas un camino para elevar un proceso ya existente, dudo que esto sea posible ya que los privilegios de administrador se otorgan en el nivel de proceso a un proceso al inicio (consulte este relacionado question). Tendría que ejecutar su aplicación "como administrador" para obtener el comportamiento deseado.

Sin embargo, hay algunos trucos que pueden permitirle hacer lo que quiere, pero tenga en cuenta que esto podría generar graves riesgos de seguridad. Ver el siguiente hilo en los foros de MSDN:

Launching MyElevatedCom Server without prompting Administrator credentialls from Standard User

actualización (de comentario)

Parece que si hay una actualización requiere la elevación de su actualización de la aplicación se realiza mejor por un proceso separado (ya sea otro ejecutable o su aplicación llamada con un modificador de línea de comando). Para ese proceso separado, puede solicitar la elevación de la siguiente manera:

var psi = new ProcessStartInfo(); 
psi.FileName = "path to update.exe"; 
psi.Arguments = "arguments for update.exe"; 
psi.Verb = "runas"; 

var process = new Process(); 
process.StartInfo = psi; 
process.Start(); 
process.WaitForExit(); 
+0

Es posible si tiene credenciales para cambiar el hilo para suplantar esas credenciales de administrador. No lo he hecho en .NET, pero tengo en C++/Win32. – kenny

+0

Divertido He publicado ese mismo enlace. ... bastante tiempo antes que tú ... – JonH

+0

@kenny: Sí, eso es cierto, pero dudo que sea posible elevar el proceso actual (que se requeriría para ciertas tareas). Consulte la discusión aquí: http://social.msdn.microsoft.com/Forums/en-IE/windowscompatibility/thread/831ffd77-6bc4-4857-9947-d74923184b0b. –

15

Un método puede requerir privilegios administrativos para ejecutar, pero no es posible elevar automáticamente al administrador al ejecutar un método.

+5

¿Por qué esto se desestimó? –

Cuestiones relacionadas