0

要求 - 我有一个要在 Windows 环境中为我的应用程序运行的定期任务。它将有一个简单的界面,允许进行一些基本配置(例如,URL 和运行频率)。我希望它在机器运行时每 X 小时(可配置)运行一次。

问题 - 我是否只是为此创建一个具有系统托盘存在的应用程序?或者我应该创建一个具有独立 UI 的服务。

顺便说一句 - 我是使用 Visual Studio Express 开发的初学者 C#,请记住。此外,如果您可以快速概述您推荐的设计,这对于新手来说会非常有用(例如,如果您建议一项服务,这是否意味着您真的需要一个应用程序来提供服务,而另一个应用程序有一个为服务进行配置的 UI?)

4

7 回答 7

3

如果您正在寻找简单的东西,请考虑使用 Windows 调度程序来调度作业、在调度程序启动后运行作业的 shim 以及允许设置的配置实用程序。但我不得不建议您评估工作需要的灵活性和可靠性。如果作业不能持续运行,那么通知区域中的用户应用程序就足够了。但如果这项工作对业务功能或其他操作至关重要,我会选择调度程序或服务。如果您提供服务,您将拥有一个配置实用程序和一个可以通过某种方式进行通信的服务。您可以让配置实用程序写入文件(可能是 XML 配置文件)以更新配置,然后重新启动服务以更新配置。

于 2009-09-15T07:15:33.507 回答
3

如果它需要在没有用户登录的情况下运行,则需要一个服务。如果它是在所有用户注销时不需要运行的用户应用程序,那么系统托盘应用程序就可以了。

于 2009-09-15T07:17:51.287 回答
1

我去年开发了这样一个应用程序。一个简单的 Windows 窗体应用程序,只有一个托盘图标。用户能够通过上下文菜单配置应用程序(当用户右键单击托盘图标时显示)。我使用了一个触发 Elapsed 事件的计时器......

如果此应用程序将是唯一及时执行某些任务的应用程序,那么只需使用带有托盘图标的 Windows 窗体应用程序即可。但是,如果有几个可能的应用程序可以发送输入并触发某些活动,那么您应该考虑在 Windows 服务中移动通用功能。如果应用程序将在具有终端服务(多个用户 -> 应用程序的多个实例)的机器上运行,您还应该考虑使用 Windows 服务。

我不会使用计划任务!它对用户不太友好...

——帕维尔·尼科洛夫

于 2009-09-15T07:30:54.023 回答
0

使用 UI 挂钩构建服务对于您想要实现的目标来说听起来过于复杂。系统托盘应用程序听起来很合适,我肯定会这样做。

于 2009-09-15T07:13:06.147 回答
0

这取决于应用程序的大小。如果它很小,如果你还没有写过这个解决方案,就把它放在托盘里

于 2009-09-15T07:13:51.873 回答
0

如果您需要它在机器运行的 X 小时内运行,即使没有人登录,那么计划任务或服务可能是正确的。

该服务将在下载之间的“死区时间”内做什么?如果答案是否定的,那么计划任务几乎可以肯定是正确的。您希望创建一个控制台应用程序以作为计划任务运行。

如果我们更多地了解正在使用的用户界面(如果有的话),将会有所帮助。

于 2009-09-15T07:16:33.210 回答
0

我会将主要处理创建为 Windows 服务,否则如果您重新启动机器并且您没有登录,您将不会让该进程开始坐在托盘中(因此您的进程将不会运行)。或者创建一个虚拟控制台应用程序或 silar 并通过 Windows 调度程序运行它。同样对于 Windows 服务,如果它崩溃,您可以将其配置为自动重新启动,您不能(轻松)使用托盘中的 Windows 应用程序来执行此操作。

然后,我将拥有第二个带有 GUI 的应用程序,它将配置写入两个应用程序使用的通用配置文件。

于 2009-09-15T07:21:15.897 回答