【发布时间】:2010-10-02 12:23:24
【问题描述】:
我有一个 ASP.NET 网站(在 C# 中),它接收用户数据,然后尝试创建一个 Windows 计划任务。当然,这在 DEV 机器上效果很好,但无法在服务器上运行。我试图弄清楚 ASPNET 用户(或匿名 Web 用户)需要哪些权限才能创建任务。
错误是:
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 'impersonate' 标志来强制应用程序以具有足够权限的用户身份运行,而不是可能没有这些权限的 ASPNET 帐户.
例子:
<system.web>
<identity impersonate="true" />
</system.web>
很遗憾,这似乎无法解决问题。从我阅读的文档来看,这应该以匿名网络用户身份运行,但似乎用户没有足够的权限。
我更改了设置以指定恰好是计算机管理员的特定域用户。示例:
<system.web>
<identity impersonate="true" userName="WindowsDomain\YourUserName" password="YourPassword" />
</system.web>
这样做允许应用程序成功创建 Windows 计划任务。因此,显然,通过正确的 Windows 2003 权限集,我可以让应用程序像在开发环境中一样执行。但是,我不打算将网络或机器管理员帐户的用户凭据以纯文本形式放在 Web.config 文件中。
是否有人碰巧知道需要设置哪些权限才能使 ASPNET 帐户按预期运行?
编辑: Win32 API 被用于创建计划任务。
【问题讨论】:
-
你用什么方法来创建定时任务? Win32、AT 命令、SCHTASKS 命令?
-
好点!我们正在使用 Win32 API。我会将其编辑到问题中。
标签: c# .net asp.net permissions scheduled-tasks