如何开发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定时任务?的主要内容,如果未能解决你的问题,请参考以下文章