2012-01-24 1 views
0

Voici le code:compteur de performance lance SecurityException

private static void CreateCounter() 
    { 
     if (PerformanceCounterCategory.Exists("DemoCategory")) 
      PerformanceCounterCategory.Delete("DemoCategory"); 

     CounterCreationDataCollection ccdArray = new CounterCreationDataCollection(); 

     CounterCreationData ccd = new CounterCreationData(); 
     ccd.CounterName = "RequestsPerSecond"; 
     ccd.CounterType = PerformanceCounterType.NumberOfItems32; 
     ccd.CounterHelp = "Requests per second"; 
     ccdArray.Add(ccd); 

     PerformanceCounterCategory.Create("DemoCategory", "Demo category", 
      PerformanceCounterCategoryType.SingleInstance, ccdArray); 

     Console.WriteLine("Press any key, to start use the counter"); 
    } 

De toute évidence:

PerformanceCounterCategory.Create("DemoCategory", "Demo category", 
    PerformanceCounterCategoryType.SingleInstance, ccdArray); 

est la ligne où l'exception a été levée.

J'ai lu environ PerformanceCounterPermission, que dois-je faire exactement?

+0

Modifiez le manifeste de votre application de sorte que 'requestedExecutionLevel' soit défini sur' requireAdministrator'. –

+0

@CodyGray Résolu. Merci;) –

+1

De rien. Ajouté une réponse complète (maintenant que je ne suis plus sur un téléphone!) De sorte que vous pouvez l'accepter et fermer la question. –

Répondre

6

Le processus de votre application n'a pas le niveau de privilège approprié. C'est ce que l'exception de sécurité vous dit.

La solution simple consiste à demander cette autorisation lorsque votre application démarre. Vous pouvez le faire en modifiant le manifeste de votre application de sorte que le requestedExecutionLevel soit défini sur requireAdministrator.

La section complète ajouté au manifeste de votre application ressemblera à quelque chose comme ceci:

<!-- Identify the application security requirements. --> 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
    <requestedPrivileges> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
    </requestedPrivileges> 
    </security> 
</trustInfo> 

Il y a potentiellement de meilleures solutions de rechange si votre application ne autrement exigent des privilèges d'administrateur, parce que vous devez toujours courir au plus bas niveau de privilège absolument nécessaire ou requis. Vous pouvez étudier ces alternatives en utilisant Google; il va impliquer un processus séparé qui demande l'élévation UAC et exécute le compteur de performance lorsque demandé explicitement par l'utilisateur.

Questions connexes