为 Windows 开发计划任务

Posted

技术标签:

【中文标题】为 Windows 开发计划任务【英文标题】:Developing a scheduled task for Windows 【发布时间】:2010-09-15 11:08:26 【问题描述】:

我必须使用 C#.net 开发一个必须每天运行一次的应用程序。它最多只运行一分钟,因此开发一个 Windows 服务是大材小用,计划任务是合适的方式。

但是,对于应用程序如何传达其结果,我有几个问题:

如何向任务调度程序指示任务已失败?这是通过程序的退出代码吗? 如何记录输出信息?控制台输出是自动捕获的,还是我必须明确写入事件查看器?

【问题讨论】:

【参考方案1】:

AFAIK 调度程序只是启动一个进程。您可以使用事件日志或其他日志系统来记录您以后需要参考的信息。

【讨论】:

【参考方案2】:

回答您的问题-

    如果任务因抛出未经检查的异常而失败,您将在计划任务查看器中看到“最后结果”,其值类似于 0xe0434f4d。或者,如果您返回一个退出代码,该代码也将显示在 Scheduled Task 查看器的 Last Result 列中。

    写入控制台,例如Console.WriteLine("blah"); 不会出现在任何地方。您需要写入事件日志或日志文件。

【讨论】:

【参考方案3】:

如果你采用日志文件的方式,你仍然可以使用Console.WriteLine("blah");。诀窍是重定向标准的 OutError 流:

        StreamWriter mylog = new StreamWriter("mylog.log");
        Console.SetOut(mylog);
        Console.SetError(mylog);

您还需要经常刷新缓冲区,以确保日志文件包含当前信息。

            Console.Out.Flush();

这又快又脏,你真的应该使用 Windows 事件日志 或 log4net。

【讨论】:

【参考方案4】:

Log4net 是一个非常好的、完整的日志框架。我强烈推荐它。

【讨论】:

以上是关于为 Windows 开发计划任务的主要内容,如果未能解决你的问题,请参考以下文章

windows计划任务

如何在Oracle中管理计划任务

论linux下计划任务

.net 应用程序在通过计划任务触发时失败

使用 IDLE(python GUI)Windows server 2012 运行的计划任务 python

当设置为“是不是登录时运行”时,Windows 任务计划程序不运行 VBScript