2009-11-23 15 views
5

Desde que apareció Vista & Windows 7, parte de mi aplicación .NET ha comenzado a arrojar excepciones de seguridad.Ejecuta la aplicación .NET como administrador

He notado que algunas aplicaciones (es decir, mi antivirus, panel de control) tienen un pequeño escudo y cuando ejecuto estas aplicaciones, Windows me solicita automáticamente los privilegios de administrador.

Sé que como usuario puedo configurar la aplicación para que se ejecute como administrador, pero eso no es lo suficientemente bueno porque si la aplicación se ejecuta sin privilegios se bloqueará en las máquinas de mis usuarios.

¿Hay alguna manera de indicar Windows (mediante programación) Quiero que la aplicación se ejecute con privilegios administrativos?

Respuesta

16

Crear un manifiesto de aplicación, establecer el requestedExecutionLevel a requireAdminstrator:

Ejemplo (generado por VS cuando se agrega Manifiesto de aplicación):

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <!-- UAC Manifest Options 
      If you want to change the Windows User Account Control level replace the 
      requestedExecutionLevel node with one of the following. 

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

      If you want to utilize File and Registry Virtualization for backward 
      compatibility then delete the requestedExecutionLevel node. 
     --> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</asmv1:assembly> 

Si se agrega a un proyecto de aplicación de Visual Studio, se se integrará en su conjunto cuando compile.

Cuestiones relacionadas