Счетчик производительности выдает исключение SecurityException - PullRequest
0 голосов
/ 24 января 2012

Это код:

    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 Ответ

6 голосов
/ 28 января 2012

Процесс вашего приложения не имеет соответствующего уровня привилегий. Вот что говорит вам исключение безопасности.

Простое исправление - запросить это разрешение при запуске приложения. Вы можете сделать это, изменив манифест своего приложения так, чтобы 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 и запускает счетчик производительности по явному запросу пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...