Windows服务 vs 计划任务

4
这是我第一次尝试以编程方式创建Windows服务或计划任务,我很困惑应该选择哪个。我查看了各种文章,例如http://weblogs.asp.net/jgalloway/archive/2005/10/24/428303.aspxscheduled task or windows service等等,但我真的不能决定两者之间的区别。

以下是我的情况:

我的应用程序将从数据库中获取几个DLL的代码路径,使用MSTest.exe执行DLL,并将结果记录回数据库。这可能每2-3小时重复一次。现在我有点倾向于计划任务,因为我不必担心与内存相关的问题,但需要一些专家建议。

P.S.:DLL包含测试方法,这些方法调用部署在各个服务器上的应用程序的Web服务。

感谢您提前的帮助。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - René
2个回答

14

对于您的情况,计划任务可能更加合适。我不认为在Windows服务上构建调度机制有太多意义,因为操作系统已经提供了调度基础架构。

Windows服务适用于需要随时响应事件而不是在特定和固定时间段内运行的进程。这就是为什么它们一直在运行的原因。其中一个例子是SQL Server服务。

这种情况下的一个例外是需要每秒钟运行一次或类似的任务。在这种情况下,Windows服务可能是最佳解决方案。对于您的特定时间表,我毫不怀疑计划任务会更加适合。


谢谢Claudio,这正是我所想的。但我不确定它运行所需的权限。据我理解,创建任务需要管理员权限,那么运行任务呢?另外,由于网络帐户将访问数据库和Web服务,任务是否能在网络帐户下正确运行?如果我更改密码会怎样?只是想避免出现问题... - blank
@nikhil: 不强制要求以管理员权限运行,但根据您的情况可能需要具有更多权限的帐户。在正常情况下,访问数据库和Web服务时,默认凭据应该足够使用。 - Claudio Redi
@CLAUDIO..当用户未登录时运行任务怎么办?我读到了它存储用户密码以实现此功能。这在编程上可行吗?另外,如何处理多个实例?例如,一个任务可能需要更长的时间,并且可能会与其重新运行时间重合...调度器有处理这种情况的功能吗? - blank
@nikhil:当您创建任务时,它会询问您是否可以在用户未登录时运行。除非您有不允许这样做的要求,否则两个实例可以同时运行而不会出现问题。 - Claudio Redi
@ CLAUDIO...我现在有一个小问题...当我使用“无论用户是否登录都运行”选项运行我的任务时,我的一些测试方法(更具体地说是UI测试)无法工作。这是因为Windows不允许任务是交互式的。这个问题有解决方法吗? - blank
显示剩余2条评论

0

尽管这篇文章已经写了几个月,但是如果对于“无论用户是否登录都运行”问题有帮助的话,以下是一个可能的解决方案:首先从控制台项目开始,然后将类型更改为 Windows 应用程序,如 一次运行并退出无界面应用程序:Windows 表单或 WPF... 有关吗? 所提到的: “如果你从来没有显示过 UI,则应该从 WinForms 项目开始(WPF 项目设置了额外的项目元数据,你不需要),然后删除对 System.Windows.Forms.dll 的引用。或者,从控制台项目开始,然后将输出类型更改为 Windows 应用程序。”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接