2009-01-30 33 views
1

我相信我在我的本地機器上運行ASP.NET頁面時已成功模擬了我自己的用戶帳戶。ASP.NET可以模擬用戶刪除性能計數器類別嗎?

使用描述here的方法,我已成功將ASPNET的WindowsIdentity.GetCurrent().Name更改爲我的域帳戶。

我可以成功寫入只有我的帳戶有權訪問的文件系統上的文件。但是,當我嘗試刪除性能計數器類別時,我得到訪問被拒絕
我對註冊表的分支進行審計,並告訴我MyMachine \ ASPNET在對象訪問上失敗。

這裏是它失敗的代碼:

if (PerformanceCounterCategory.Exists (PerfmonCategory)) 
     PerformanceCounterCategory.Delete (PerfmonCategory); 

及其對刪除呼叫失敗。

(我的帳戶是admin,我可以在ASP.NET上下文外成功運行相同的代碼)。

我懷疑這System.Diagnostics名稱空間調用實際上是調用一些COM進程,並以某種方式因爲第二跳而被反彈。任何人都可以確認可能會發生什麼?

編輯: 例外: 訪問被拒絕 說明:在當前Web請求的執行過程中發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:

System.ComponentModel.Win32Exception:訪問被拒絕

在完全信任運行。

+0

如果你在部分信任下運行,那麼粘貼如何拋出異常我打賭這是一個CAS例外 – Kev 2009-01-30 00:48:43

回答

2

你可以在自己的應用程序池(總是一件好事),運行應用程序併爲其分配一個服務用戶適當的權限,這樣你就不需要惹模擬。

1

確實需要成爲管理員才能添加或刪除性能計數器。

我不知道爲什麼你要使用Win32 API調用做你的模擬 - 它已經有一段時間,因爲我用它搞砸,但我認爲你需要做的是使用

WindowsIdentity.GetCurrent().Impersonate() 

要清楚的是,您首先需要使用Windows身份驗證在您的Web應用程序中進行身份驗證,然後您應該能夠調用Impersonate()。

Impersonate() Method

+0

其實你仍然需要他們所有可愛的Win32 API調用來獲得正確的登錄令牌:WindowsIdentity windowsIdentity = new WindowsIdentity(logonToken )http://msdn.microsoft.com/en-us/library/chf6fbt4.aspx – Kev 2009-01-30 00:46:26

+0

我不認爲你*需要* logonToken ...這就是爲什麼沒有參數過載的原因。 – 2009-01-30 01:47:30