运行Windows窗体应用程序作为服务?

时间:2009-01-20 20:57:00

标签: .net winforms windows-services

我有一个我编写的Windows窗体应用程序,可以监视收件箱和数据库。客户告诉我,每次服务器重新启动时都需要运行。让我感到羞耻的是让客户改变了要求。

我在想...有没有办法让Windows Forms应用程序作为服务运行,以便它自动启动?

澄清

我想尝试不再编写任何代码......如果可能的话!

8 个答案:

答案 0 :(得分:8)

从NT服务启动Windows程序

查看此文章:http://www.codeproject.com/script/Articles/ArticleVersion.aspx?aid=719&av=49654

这是一篇非常古老的文章,但它已经工作了8年,并且作者继续保持最新状态。

它会做你想做的事。

答案 1 :(得分:5)

如果您确定该应用程序可以无人值守地安全运行(我的意思是它可以 从不 抛出一个模式UI元素,如消息框)并且它没有' t需要任何交互,直到关闭,它将被终止,然后将其作为计划任务运行,并将触发器设置为系统启动。

如果它可以无人值守运行但可能需要手动关闭和重启,或者它不能在关机时终止,那么按照EnocNRoll的建议使用XYNTService。这是一个可怕的黑客,但它会适合你想要的。

但到目前为止,最好的解决方案是将程序的功能与用户界面分开,并编写适当的服务。对于生产服务器,我不允许任何其他内容。如果不容易分开,那么你有一些设计问题,无论如何都要考虑。

答案 2 :(得分:1)

您可以将winforms应用程序作为服务运行,您将无法看到它 - 它将显示在所谓的虚拟桌面上,无法在您的显示器上查看。

答案 3 :(得分:1)

答案 4 :(得分:0)

考虑到这一点的唯一方法是确保应用程序没有UI元素,因为你必须跳过非Vista机器上的箍来使这个工作,而在Vista上,你不能完全与桌面交互。

相反,您最好将功能重构为一组共享库,然后创建使用这些库的服务,并在客户端安装。

答案 5 :(得分:0)

如果在表单应用程序中有一个很好的解耦功能,那么使用其安装程序创建服务类应该很简单,然后在服务的OnStart方法中启动处理器类:

    protected override void OnStart(string[] args)
    {
                    Processor processor = new Processor();
        Thread workerThread = new Thread(processor.OnStart);
        workerThread.IsBackground = true;

        try
        {
            workerThread.Start();
        }
        catch
        {
                      //...
        }
    }

答案 6 :(得分:0)

您可以使用InstallUtil将您的应用安装为服务,但您需要确保它不依赖于GUI,我建议您更改应用的启动,以便它不会尝试创造任何形式。

答案 7 :(得分:-1)

发现此article名为如何创建用户定义的服务