2009-11-23 14 views
5

Dal momento che Vista & Windows 7 è uscito alcune delle mie applicazioni .NET ha iniziato a lanciare eccezioni di sicurezza.Esegui applicazione .NET come amministratore

Ho notato che alcune applicazioni (ad esempio il mio antivirus, il pannello di controllo) hanno uno scudo piccolo e quando eseguo queste applicazioni i privilegi di amministratore mi vengono automaticamente richiesti da Windows.

So che come utente posso impostare l'applicazione per l'esecuzione come amministratore ma non è abbastanza buona perché se l'applicazione verrà eseguita senza privilegi si bloccherebbe sui computer degli utenti.

C'è un modo per comunicare a Windows (a livello di codice) che l'applicazione venga eseguita con privilegi amministrativi?

risposta

16

Crea un manifesto dell'applicazione, impostare il requestedExecutionLevel a requireAdminstrator:

Esempio (generato da VS quando si aggiunge Applicazione manifesto):

<?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> 

Se si aggiunge a un progetto di applicazione Visual Studio, è sarà incorporato nel tuo assembly quando compili.

Problemi correlati