控制台应用程序优于Windows服务的好处

时间:2009-01-21 12:25:14

标签: .net

我有一个使用预定事件的.Net控制台应用程序将启动,调用mweb服务方法并关闭。每小时/每天运行一次。虽然实现没有“错误”,但我想知道将此实现作为Windows服务是否有任何好处。

有没有人对这种情况下的最佳做法有什么看法?

8 个答案:

答案 0 :(得分:24)

我发现Windows服务难以调试,所以我倾向于只在以下情况下使用它们:

(A)我正在做的事情非常复杂或

(B)需要一直运行(例如:监控更改内容)

我发现大多数事情通常都可以通过Console App一些命令行参数和Windows Scheduler完成。

答案 1 :(得分:17)

服务与应用程序有三种不同的方式:

  1. 在没有用户登录系统的情况下运行
  2. 它不能有任何用户界面(控制台也是用户界面)
  3. 它可以在提升的权限(SYSTEM帐户)下运行,从而执行用户不允许的操作。
  4. 这里要问的问题是:您是否需要服务可以提供的不同选项?如果答案为否,则不要使用服务。

    我从你的问题推断你需要一个没有任何用户界面的后台应用程序(上面的第2项)。您似乎不需要项目1或3.您可以通过不创建一个没有任何窗口(控制台或其他)的纯后台应用程序。只需创建一个简单的Windows应用程序并更改

    即可
    static class Program
    {       
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
    

    static class Program
    {       
        [STAThread]
        static void Main()
        {
            // Application.EnableVisualStyles();
            // Application.SetCompatibleTextRenderingDefault(false);
            // Application.Run(new Form1());
    
            DoWhateverYouWant();
        }
    }
    

    哦,是的,Chris完全正确地调试服务真是太痛苦了!

答案 2 :(得分:3)

我认为你所做的就是最好的做法。没有什么比讨厌添加他们自己的服务的应用程序更容易定期做一些小事。通过在> Vista中更新的事件日志/任务调度程序集成,甚至更少的应用程序确实需要服务,如果他们这样做,它可以是按需的。

你正在改善世界。

: - )

哦,作为一个控制台应用程序,如果需要,你可以轻松地手动运行它,这对于可调试性非常有用。

澄清:继续,你做得对。

答案 3 :(得分:1)

好处:如果您的机器重新启动(即服务器),您无需登录即可重新开始工作。

我同意调试Windows服务SUCKS!这太可怕了,MS应该真正解决调试服务的能力。

但是......有一些免费工具可以帮助解决这个问题。 Anderson Imes有一个很好的实用工具,即使在调试周期中,也可以像编写控制台应用程序一样编写Windows服务。

http://theimes.com/files/

查看他的实用程序以进行服务调试

关于他的实现最好的部分是,它是代码中的1行更改,如果您不希望他的库在您的生产实例中,您可以使用#if DEBUG参数轻松管理。

答案 4 :(得分:1)

调试服务有一个简单的解决方法。您可以创建一个组合的控制台/服务应用程序。

检查一些命令行参数(例如-debug),然后执行OnStart代码,等待按键,执行OnStop代码。

我使用相同的方法来提供从同一个EXE安装,卸载,启动和停止我的服务的界面。

答案 5 :(得分:0)

需要考虑的一件重要事情是控制台应用程序支持 System.Drawing 命名空间,这意味着您可以打印。它在Windows服务中有效,但它不受支持且不完全稳定。

答案 6 :(得分:0)

Creego的两分和treb的三分不容否认。但是,我发现SQL Server Agent 05/08 / R2是一个非常可靠和有用的任务调度程序。它比Windows任务计划更可靠,您不必担心批量权限或用户登录。

我有一个后台系统程序,它通过SQL Server代理每2分钟运行一次。我强烈考虑将其转换为Windows服务,但我无法证明这一点。

尽管如此,在另一种情况下,鳞片很容易被倾斜。

答案 7 :(得分:0)

这不是你的问题,但我通常会将这两种方法结合起来。

我使用控制台进行调试,并使用Windows服务共享相同的库和规则。