c# - .NET 在服务器上创建计划任务失败并显示 E_ACCESSDENIED

标签 c# .net asp.net permissions scheduled-tasks

我有一个 ASP.NET 网站(在 C# 中),它接收用户数据,然后尝试创建一个 Windows 计划任务。当然,这在 DEV 机器上运行良好,但无法在服务器上运行。我试图弄清楚 ASPNET 用户(或匿名网络用户)需要哪些权限才能创建任务。

错误是:

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> 

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

我更改了设置以指定一个恰好是机器管理员的特定域用户。示例:

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

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

有没有人碰巧知道需要设置哪些权限才能使 ASPNET 帐户按预期运行?

编辑:Win32 API 用于创建计划任务。

最佳答案

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

关于c# - .NET 在服务器上创建计划任务失败并显示 E_ACCESSDENIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462313/

相关文章:

c# - Properties.Settings 添加 LINQ to SQL 后的歧义

c# - 无法在Unity 5中执行extern c函数

c# - 奇怪的 TimeSpan.ToString 输出

c# - UtcNow.ToLocalTime() 在 CentOS 上返回 UTC 时间而不是本地时间

c# - 使用 javascript 从另一个按钮触发单击按钮事件

c# - 试图从 null 一对一属性 : ContentItemRecord - Orchard CMS 分配 id

asp.net - 我可以在一个共享点网站上使用多个母版页吗?

c# - WCF 数据服务使用错误的 oData 协议(protocol)版本执行 sproc

c# - 线程暂停和恢复 C#

.net - 对于开发者来说,学习/使用 SSIS 值得吗?