c# - 在服务器上使用E_ACCESSDENIED,.NET创建计划任务失败




asp.net permissions (3)

我有一个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> 

不幸的是,这似乎不能解决问题。 从我读的文档中,这应该作为匿名Web用户运行,但似乎用户没有足够的权限。

我改变了设置来指定恰好是机器上的管理员的特定域用户。 例:

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

这样做可以使应用程序成功创建Windows计划任务。 所以,显然,使用正确的Windows 2003权限设置,我可以让应用程序像在开发环境中一样执行。 但是,我不打算将网络或计算机管理员帐户的用户凭据以纯文本格式放置在Web.config文件中。

有人碰巧知道什么权限确切需要设置为了获得ASPNET帐户的行为,如所期望的?

编辑:正在使用Win32 API创建计划的任务。


你正在写什么事件日志? 有可能您的组件(在IIS中我承担?)无法访问事件日志中的写入内容。

这只是一个猜测〜我刚才也遇到类似的问题,我已经用这种方法解决了:

点击


您不用担心ASPNET用户权限,您的内部流程是否允许您创建一台机器特定帐户并在那里提供凭据?


我已经能够解决我的问题,但不是完全的。 我还没有确定创建和运行计划任务所需的确切权限,但以下内容似乎有效:

  1. <identity impersonate="true" />到Web.config
  2. 将“IUSR”用户(即将使用模拟器运行的用户)添加到“Backup Operators”组中。

这使应用程序能够访问“计划任务”文件夹,以便他们可以创建和运行任务。

我们还有一个问题,那就是任务试图以本地系统帐户运行。 不幸的是,只有管理员似乎能够将本地系统帐户分配为正在运行的用户,所以我们需要模拟为管理员帐户,而不是作为备份操作员来使我们的代码正常运行。





scheduled-tasks