0

これはコードです:

    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、正確にはどうすればよいですか?

4

1 に答える 1

6

アプリケーションのプロセスに適切な特権レベルがありません。それがセキュリティ例外があなたに言っていることです。

簡単な修正は、アプリケーションの起動時にその許可を要求することです。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の昇格を要求し、ユーザーから明示的に要求されたときにパフォーマンスカウンターを実行する、のプロセスをスピンオフすることが含まれます。

于 2012-01-27T20:34:18.223 に答える