Счетчик производительности выдает исключение 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 и запускает счетчик производительности по явному запросу пользователя.

Другие вопросы по тегам