代码之家  ›  专栏  ›  技术社区  ›  Jay S

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

  •  3
  • Jay S  · 技术社区  · 16 年前

    错误是:

    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> 
    

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

    Win32 API用于创建计划任务。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Chris Stewart    16 年前

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

        2
  •  1
  •   Jay S    15 年前

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

    1. 添加 <identity impersonate="true" /> 转到Web.config
    2. 将IUSR用户(即应用程序将使用模拟运行的用户)添加到“备份操作员”组。

    这使应用程序可以访问Scheduled Tasks文件夹,以便创建和运行任务。

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

        3
  •  0
  •   Frederik Gheysels    16 年前

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

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

    Click

        4
  •  -4
  •   Rashad Rashad    16 年前

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