我有一個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來創建計劃任務。
您使用什麼方法創建計劃任務? Win32,AT命令,SCHTASKS命令? – Kev 2009-01-20 18:07:37
好點!我們正在使用Win32 API。我將編輯這個問題。 – 2009-01-20 18:30:02