如何开发Windows定时任务?

Posted

技术标签:

【中文标题】如何开发Windows定时任务?【英文标题】:How to develop a Windows scheduled task? 【发布时间】:2010-09-29 22:45:34 【问题描述】:

我需要有一个流程,将日常数据编译成 PDF,然后附加到电子邮件中。我已经在正在开发的应用程序中使用 MSSQL 发送电子邮件,并希望继续使用 MSSQL 作为电子邮件处理器。

在我的研究中,我发现这可以通过创建 Windows 服务来实现。但是,因为我真的只希望这个过程每天运行一次;保持一个始终处于活动状态的 Windows 服务似乎有点过头了。

我从未使用任务调度程序来运行自建应用程序。我想确保我以正确的方式去做。据我了解,我将不得不...

    在 Visual Studio 中创建一个新项目(Project X) 程序(项目 X)生成 PDF 并与 MSSQL 交互以发送电子邮件 将(项目 X)构建为 EXE 使用任务计划程序安排 EXE 以按我需要的任何计划运行。

我应该关注哪些安全方面的问题?只有我能想到的加密我的 MSSQL 连接字符串;当然,还要将 EXE 排除在 Web 应用程序所在的 Web 可访问目录之外。

提前感谢您的帮助/确认,因为我知道有些人会认为这是一个愚蠢的问题。

【问题讨论】:

【参考方案1】:

我看到你唯一没有考虑过的是任务计划程序运行你的 EXE 的身份,但看看你似乎是如何控制环境中的一切的,这应该不是太大的问题。

【讨论】:

【参考方案2】:

正如 Esteban 所说:这是否会在您的帐户下运行,并且您会一直登录到机器上吗?如果是这样,是您最大的安全风险。您可以使用屏幕保护程序来强制提示登录,这在很大程度上确实不亚于注销安全。但是,我怀疑这是否会被视为“最佳实践”。

我会考虑构建一个每天只唤醒一次的 Windows 服务。它们确实不是很难构建,尽管您需要确保有一个良好的测试机制(编译成可单元测试的 dll 的独立类是个好主意),因为一旦它们运行就对其进行测试非常困难.但不要让服务应用程序的“神秘”或资源使用的想法让您失望。你会惊讶于它们是多么容易。就资源而言...您将花费更多资源来保持完整的 Winforms 应用程序运行!

【讨论】:

【参考方案3】:

如果要构建 Windows 服务,可以将其设置为在服务器(数据库所在的服务器)启动时启动。我有一个用于发送电子邮件的外部跟踪系统,可能在一个单独的数据库中。当服务器启动时,您的服务也会启动。服务检查今天是否已发送电子邮件。如果没有,建立电子邮件,发送电子邮件,然后在日志中标记它(我假设的 db 表)。然后让服务休眠 24 小时,然后让它再次检查(使用事件)。重复。

【讨论】:

正如 OP 所说,Windows 服务对于每天只运行一次的进程来说太过分了。 Jon Galloway 有一个很好的article 说明为什么 Windows 任务计划程序更适合计划任务。 (线索就在名字里)。

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

如何配置定时任务

如何设置PowerShell脚本定时执行

如何设置win2008的定时任务

任务计划程序-Windows2008定时重启

Windows Server2012/2018 定时任务设置及执行失败的解决方法

Spring定时任务为啥没有执行