10

パフォーマンス カウンターをインクリメントするために必要なアクセス許可を判断するのに苦労しています。カウンターで .Increment を呼び出そうとしたときに、InvalidOperationException/Access Denied (と思う) が 1 回だけ発生しました。これにより、次の情報が得られました。

http://support.microsoft.com/kb/555129

パフォーマンス カウンターを更新する ASP.NET アプリケーションを運用環境に移行するプロセスに関する最大の問題は、アクセス許可です。既定では、パフォーマンス カウンターをインクリメントするには、ユーザーは管理者またはパワー ユーザーの権限を持っている必要があります。

そこから、ユーザーをパワー ユーザー グループに追加し、問題なく続行しました。「パワーユーザー」がVista以外の権限を持っていないことを後で発見したのは、無関係の問題からであり、同じ記事に戻ることができました。

幸いなことに、これらの代替手段を考えると、パフォーマンス カウンターを更新するために必要なアクセス許可セットは、管理者またはパワー ユーザーとして実行する場合よりもはるかに小さいことがわかります。レジストリ キー HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib で、必要なユーザーがフル コントロールを持つようにアクセス コントロール リストを設定します。元の例では、ASPNET ユーザーにフル コントロールが付与されますが、パフォーマンス カウンターを更新する必要があるすべてのユーザーにアクセスを付与できます。

しかし、戻ってテスト ユーザーをパワー ユーザー グループから削除したため、アプリケーションはまだ問題なくカウンターをインクリメントしているため、それは真実ではないようです。

さらに、設定する権限があれば、HKLM\System\CurrentControlSet\services\ の下の個別のカウンターにあるようです。

元のアクセス許可の問題を引き起こしたコードに他の問題があった可能性があることを十分に認めます。ただし、これを XP にまでさかのぼって展開する必要があるため、上記が単に古い情報なのか、それとも完全に間違っているのかを確認することが重要です。すぐにこれを自分で確認できますが、誰かが情報を検証したり、具体的なドキュメントを教えてくれたりするといいでしょう.

4

1 に答える 1

0

ここには 2 種類のアクセス許可があります。

  1. パフォーマンス カウンター カテゴリを変更する権限

  2. .NET コードを介してパフォーマンス カウンターの変更を呼び出すためのアクセス許可

最初のものについては、レジストリ キー HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib (=手動で追加するか、Performance Log Users にユーザーを追加するなど) を変更するためのアクセス許可のみが必要であり、通常のユーザーが持っている他のいくつかのもの (例: KB に記載されているように、HKLM\SYSTEM\CurrentControlSet\Services にアクセスします。

2 つ目は、コード アクセス セキュリティ (CAS) ポリシーに関連しています。CAS ポリシーは、実行中のコードが操作 (多くの場合、ファイル システムやパフォーマンス カウンターなどのリソース) に対するアクセス許可を持っているかどうかを判断するメカニズムであり、そうでない場合は SecurityExeption がスローされました。CAS ポリシーは、.NET 4 以降、さまざまな理由で廃止されました (たとえば、.NET コードの横にネイティブの Win32 API もあります)。

CAS ポリシーを理解したい場合は、次の記事をご覧ください: .NET Code Access Security について

CAS が有効になっている場合、コンピューターで実行されているコードに関するポリシーを作成し、カウンターの生の値をインクリメントまたは設定できるかどうか、またはセキュリティ例外をスローできるかどうかを設定することができました (パフォーマンス カウンターの可能なアクセス許可PerformanceCounterPermissionAccessにあります)。

基本的に、.NET 4 を使用している場合は、CAS ポリシーを無視できます (無効になっています)。以前のバージョンでは、mscorcfg.msc を使用してプログラムのアクセス許可を確認します。

于 2016-10-08T12:15:15.060 に答える