【问题标题】:C# Task Scheduler Trigger not workingC# 任务计划程序触发器不起作用
【发布时间】:2011-09-11 21:28:42
【问题描述】:

我不知道是否有人可以提供帮助,但是当我运行我的应用程序时出现错误(对象引用未设置为对象的实例)。代码如下:

using (SqlConnection myConnection2 = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString))
            {
                myConnection2.Open();
                SqlCommand cmd2 = new SqlCommand("SELECT ID, TaskName, Permission from ScheduledTasks s, Roles r WHERE s.ID= " + txtTaskID.Text, myConnection2);

                SqlDataReader rdr;
                rdr = cmd2.ExecuteReader();

                if (rdr.HasRows)
                {
                    while (rdr.Read())
                    {
                        string task = rdr["TaskName"].ToString();
                        Trigger tg = new RunOnceTrigger(DateTime.Now);
                        ScheduledTasks st = new ScheduledTasks();
                        Task t = st.OpenTask(task);
                        t.Triggers.Add(tg);
                        t.Save();
                    }
                }
            }

它在 t.Triggers.Add(tg) 行中出错。我已经逐步完成了代码,并且任务正在存储正确的任务名称。它只是不会启动任务。

【问题讨论】:

  • 您能否提及您为 ScheduledTasks 功能使用的库/dll。因为,我很难在网上找到文档。从谷歌搜索中,我看到人们首先创建一个新任务[而不是打开它],然后添加一个触发器(不初始化集合)然后保存它,在所述触发器时间有效地运行它。也许如果您阅读文档,也许 OpenTask 只允许用于现有任务...
  • 它是代码项目中某人创建的任务计划程序。这里是codeproject.com/KB/cs/tsnewlib.aspx

标签: c# asp.net sql scheduled-tasks


【解决方案1】:

我的直接猜测是 t.Triggers 当前等于 null

在尝试向其中添加任何内容之前,您可能需要在 t.Triggers 中实例化一个触发器集合。

【讨论】:

  • 我已经浏览了所有示例代码,但无法弄清楚他们在哪里这样做。
【解决方案2】:

您似乎按照作者演示的方式使用它。你得到的错误是什么?请发布异常消息。

来自作者的常见问题解答:

为什么会出现访问异常?

这个问题通常出现在 想要使用任务的客户 来自 ASP.NET 代码的调度程序。 通常,这样的代码运行在 ASPNET 帐户相当低 特权,不能使用任务 调度器。解决这个问题的方法是 将您的代码设置为在另一个,更多 特权帐户。这就是所谓的 模拟,你可以设置它 在您的 web.config 文件中。

任务计划程序不需要 客户端以管理方式运行 特权,但如果不是,就会有 限制可以做什么。一世 还没有发现这些是 有据可查。然而,直到 最近似乎 非管理员可以看到和 操纵他们创建的任务,但是 没有其他人。在 Windows XP SP2 中,有 似乎是一些概括。在 Explorer,有一个新的安全性 任务属性对话框中的选项卡。 也有做一点 解释该文件的文档 任务的权限将支配 其他用户可以用它们做什么。 读=看它,读/执行=运行 任务,Write = 修改任务。

我还想知道,您没有提供任务应该做什么的任何细节。就像应该发生的事情一样,当任务运行时,需要执行一些程序。我假设您在发布之前删除了这些行。如果没有,那么这个库可能不允许在没有关于在预定时间执行哪个应用程序的信息的情况下创建任务。

我使用这个特殊的库:http://taskscheduler.codeplex.com/ ...它正在积极开发,最新版本于上个月发布,五月。它会根据操作系统自动使用正确版本的任务计划程序。这只是个人喜好...

【讨论】:

  • 我已经验证它是在一个拥有服务器权限的帐户下运行的。我可能会尝试更改与任务关联的用户。该任务运行一个复制文件的批处理文件。关于你链接的库,手动查询任务和运行任务方便吗?这就是我现在需要做的就是拥有一个显示任务的按钮和一个根据我在数据库中创建的 ID 启动任务的按钮。
  • 所以我正在尝试另一个任务计划程序,现在当我尝试这个 foreach (RunningTask rt in ts.GetRunningTasks(true)) 时,它告诉我它不受支持。
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 2018-07-02
  • 2013-03-01
  • 2023-02-07
  • 2015-11-19
  • 1970-01-01
  • 2022-12-01
  • 2015-02-26
相关资源
最近更新 更多