C# 服务器上的.NET创建计划任务失败,E_访问被拒绝

C# 服务器上的.NET创建计划任务失败,E_访问被拒绝,c#,.net,asp.net,permissions,scheduled-tasks,C#,.net,Asp.net,Permissions,Scheduled Tasks,我有一个ASP.NET网站(C#),它接收用户数据,然后尝试创建windows计划任务。当然,这在DEV机器上非常有效,但无法在服务器上运行。我正在试图弄清楚ASPNET用户(或匿名web用户)创建任务需要哪些权限 错误是: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) Stacktrace: at MyScheduler.NewWorkItem(String TaskName, Gui

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

不幸的是,这似乎并没有解决这个问题。从我阅读的文档来看,这应该以匿名web用户的身份运行,但用户似乎没有足够的权限

我更改了设置,指定了一个恰好是计算机管理员的特定域用户。例如:

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

这样做允许应用程序成功创建Windows计划任务。因此,很明显,只要有一组正确的Windows 2003权限,我就可以让应用程序像在开发环境中一样运行。但是,我不会将网络或计算机管理员帐户的用户凭据以纯文本形式放在Web.config文件中

是否有人碰巧知道为了使ASPNET帐户按预期运行,需要设置哪些权限


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

是否正在向事件日志中写入内容? 您的组件(我想是托管在IIS中的?)可能无法访问事件日志中的写入内容

这只是一个猜测~不久前,我遇到了一个类似的问题,我用这种方式解决了它:


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

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

  • 添加到Web.config
  • 将IUSR用户(即应用程序将使用模拟运行的用户)添加到“备份操作员”组
  • 这使应用程序可以访问Scheduled Tasks文件夹,以便创建和运行任务


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

    另一个选项是在服务器上闪存bios

    我同意,创建一个虚拟帐户来运行任务将是一个选项。但是,该虚拟帐户仍然需要正确的权限。目前,我意识到将用户放入Administrators组是可行的,但需要知道帐户需要哪些特定权限。您使用什么方法创建计划任务?Win32,AT命令,SCHTASKS命令?很好!我们正在使用Win32 API。我将把它编辑成问题。