2009-10-14 12 views
5

リモートコンピュータからPerfmonカウンタを読み取るための単純なAsp.Netページを作成しようとしています。アクセスが拒否されましたリモートコンピュータ(Perpmon)からPerfmonカウンタを読み取る

Visual Studio開発Webサーバーを使用してページを実行すると、すべて正常ですが、IISでホストされているときに同じページを実行しようとすると、Perfmonカウンタをインスタンス化する行でアクセス拒否エラーが発生します。

PerformanceCounter freeSpaceCounter = new PerformanceCounter("LogicalDisk", "Free Megabytes", "D:", "RemoteMachine12"); 

これは私が得る例外です:

Exception Details: System.ComponentModel.Win32Exception: Access is denied 

私は(匿名ユーザーとして自分自身で)匿名アクセスの両方を使用して試したし、統合Windows認証 - の両方が作業をいけません。 PerfMonカウンター(ASPNETアカウントのような)を読み取るために使用されるアカウントは明らかです。そのアカウントではなく私のアカウントを使用してPerfMonカウンターにアクセスするにはどうすればよいですか? MSDNから

答えて

6

ここで問題になっているのは、IISが(デフォルトで)ローカルアカウントのコンテキストで動作することです。このローカルアカウントはリモートマシン上に存在しないため、接続してパフォーマンスカウンターを取得することはできません。 VS開発Webサーバーを使用すると、自分のローカルアカウントで実行されるため、すべてが機能します。

ドメイン環境の場合は、両方のマシンにアクセスできるドメインアカウントとして実行するようにIISアプリケーションプールを構成できますが、すべてが機能しますが、これ以上の制御が必要な場合があります。

偽装用に構成されたアプリケーション(または認証されたアカウントで実行するようにプールが構成されているIIS7を使用している場合)を使用するか、カウンターを読む直前に偽装することができます。

あり偽装する方法のカップルです - あなたが認証をしたくない場合は、あなたが設定する必要があります最も安全な統合認証を使用するようにIISを構成することですが、その後

PerformanceCounter freeSpaceCounter = null; 
using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate()) 
{ 
    freeSpaceCounter = new PerformanceCounter("LogicalDisk", 
           "Free Megabytes", "D:", "RemoteMachine12"); 
} 

を呼び出しを包みますアプリケーションプール、またはあなたのアプリケーションにユーザー名とパスワードをハードコードしてください - これは最後の手段である必要があります。KB306158

+0

ありがとうございました - これは私が探していた答えです。 – Justin

2

:Windows Vistaでは、Windows XPのx64 Edition、またはWindows Server 2003でパフォーマンスカウンタを読み取ること

、あなたはどちらかのパフォーマンスモニターのユーザーグループのメンバーであるか、管理者権限を持っている必要があります。

関連する問題