Счетчик производительности выдает исключение 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");
}
Очевидно:
PerformanceCounterCategory.Create("DemoCategory", "Demo category",
PerformanceCounterCategoryType.SingleInstance, ccdArray);
это строка, где было сгенерировано исключение.
Я читал о PerformanceCounterPermission
что мне делать именно?
1 ответ
Процесс вашего приложения не имеет соответствующего уровня привилегий. Это то, что говорит вам исключение безопасности.
Простое решение - запросить это разрешение при запуске приложения. Вы можете сделать это, изменив манифест вашего приложения так, чтобы requestedExecutionLevel
установлен в requireAdministrator
,
Полный раздел, добавленный в манифест вашего приложения, будет выглядеть примерно так:
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
Существуют потенциально лучшие альтернативы, если ваше приложение иначе не требует административных привилегий, потому что вы всегда должны работать с самым низким уровнем привилегий, который абсолютно необходим или необходим. Вы можете исследовать эти альтернативы с помощью Google; он будет включать в себя выделение отдельного процесса, который запрашивает повышение прав UAC и запускает счетчик производительности по явному запросу пользователя.