2009-01-20 48 views
3

我有一個ASP.NET網站(用C#),它接收用戶數據,然後嘗試創建一個Windows計劃任務。當然,這在DEV機器上效果很好,但無法在服務器上運行。我試圖找出ASPNET用戶(或匿名網絡用戶)需要什麼權限才能創建任務。.NET在服務器上創建計劃任務失敗,並且E_ACCESSDENIED

的錯誤是:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 
Stacktrace: 
    at MyScheduler.NewWorkItem(String TaskName, Guid& rclsid, Guid& riid, Object& obj) 
    at MyScheduler.CreateTask(String name) 

我已經做了一些搜索和建議的解決方案是使用在web.config「冒充」標誌強制應用程序具有足夠權限的用戶身份運行,而不是可能沒有這些權限的ASPNET帳戶。

例子:

<system.web> 
    <identity impersonate="true" /> 
</system.web> 

不幸的是,這似乎並沒有解決問題。從我讀過的文檔中,這應該作爲匿名Web用戶運行,但似乎用戶沒有足夠的權限。

我改變了設置來指定恰好是機器上的管理員的特定域用戶。示例:

<system.web> 
    <identity impersonate="true" userName="WindowsDomain\YourUserName" password="YourPassword" /> 
</system.web> 

這樣做可以使應用程序成功創建Windows計劃任務。所以,顯然,使用正確的Windows 2003權限集合,我可以讓應用程序像在開發環境中那樣執行。但是,我不打算將網絡或計算機管理員帳戶的用戶憑據以純文本格式放置在Web.config文件中。

有沒有人碰巧知道需要設置什麼權限才能讓ASPNET帳戶按照期望行事?

編輯:正在使用Win32 API來創建計劃任務。

+0

您使用什麼方法創建計劃任務? Win32,AT命令,SCHTASKS命令? – Kev 2009-01-20 18:07:37

+0

好點!我們正在使用Win32 API。我將編輯這個問題。 – 2009-01-20 18:30:02

回答

1

我已經能夠解決我的問題,但不是完全。我仍然沒有確定創建和運行計劃任務所需的確切的權利,但以下似乎工作:

  1. 添加<identity impersonate="true" />到Web.config
  2. 添加IUSR用戶(這是用戶的應用程序將像使用模擬器一樣運行)到「備份操作員」組。

這使應用程序能夠訪問計劃任務文件夾,以便他們可以創建和運行任務。

我們還有一個問題,那就是任務試圖以本地系統帳戶運行。不幸的是,只有管理員似乎能夠將本地系統帳戶分配爲正在運行的用戶,所以我們需要模擬爲管理員帳戶,而不是作爲備份操作員來使我們的代碼正常運行。

0

您是否正在爲eventlog寫點東西? 有可能您的組件(託管在IIS中我認爲?)無法訪問事件日誌中的寫入內容。

這只是〜前一陣子,我一直面臨着類似的問題一種猜測,我已經以這種方式解決了這個問題:

Click

1

而是擔心ASPNET用戶權限,您的內部流程是否允許您創建機器特定帳戶並在那裏提供憑據?

+0

我同意,創建一個虛擬帳戶來運行任務將是一個選項。但是,該虛擬帳戶仍需要正確的權限。目前,我意識到將用戶置於管理員組中可行,但需要知道某個帳戶需要什麼特定權限。 – 2009-01-20 18:04:33

-4

另一種方法是刷新服務器上的BIOS