C#任务调度程序触发器不工作

本文关键字:工作 触发器 任务调度程序 | 更新日期: 2023-09-27 17:58:43

我不知道是否有人能帮上忙,但我在运行应用程序时遇到了一个错误(对象引用未设置为对象实例)。这是代码:

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)行中出错。我已经遍历了代码,任务正在存储正确的任务名称。它只是无法启动任务。

C#任务调度程序触发器不工作

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

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

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

来自作者常见问题解答:

为什么我会获得访问例外?

这个问题通常会出现要使用任务的客户端ASP.NET代码中的计划程序。通常,这样的代码运行在ASPNET帐户特权,无法使用任务调度程序。解决方案是将您的代码设置为在另一个中运行特权帐户。这叫做模拟,你可以设置它在web.config文件中。

任务计划程序不需要要与管理一起运行的客户端特权,但如果不是,就会对所能做的事情加以限制。我还没有发现这些有据可查。但是,直到最近似乎非管理员可以看到和操纵他们创建的任务,但是没有其他人。在Windows XP SP2中似乎是某种概括。在里面资源管理器,有一个新的安全选项卡。还有做一点说明文件对任务的权限将起支配作用其他用户可以用它们做什么。读取=查看,读取/执行=运行任务,Write=修改任务。

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

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