2016-07-25 91 views
0

我已经在C#中创建了Windows窗体应用程序,并且在其上添加了一个Window服务。问题出在安装后每次启动服务时,我总是得到Error 1053 the service did not respond to the start or control request。但是,在创建新项目并选择Windows服务并安装并运行后,没有错误,服务正常启动。可以将Windows服务添加到现有项目中吗?

那么我必须为Windows服务创建一个单独的项目,否则我只是缺少一些东西?

我的目标框架是4.5.2,我计划在Windows服务中使用UDP和TCP功能。

+0

“所以我必须为Windows服务创建一个单独的项目”*否*。 “或者我只是想念一些东西?” *是* –

+0

有什么我必须配置?你觉得缺少什么?这是我第一次在Windows Service中工作。我学习如何创建基于教程的Windows服务基础。我总是得到与Windows服务的教程,但没有与Windows窗体应用程序的教程。 – Polar

+2

我不知道。我们将如何重现您的问题? –

回答

0

从Main()调用ServiceBase.Run()是使应用程序成为服务而不是普通应用程序的原因。如果您使用Windows服务模板创建项目,但将ServiceBase.Run()的调用拿走,则结果将是普通应用程序而不是服务。 (可能是一个打破应用,但应用程序仍然。)

引擎盖下,ServiceBase.Run()调用StartServiceCtrlDispatcher(),它调用内部ServiceBase.ServiceMainCallback()函数,它调用你的OnStart()函数。因此,如果您不调用Run(),则不会调用OnStart(),您的服务将不会执行任何操作。

StartServiceCtrlDispatcher()函数也间接负责调用OnStop()和所有其他相关方法。基本上,这是服务的核心,没有它将无法正常工作。另外,当然,如果您不调用它,Windows最终会注意到控制调度程序尚未启动,并假定该进程已挂起并将其终止。这就是1053错误的含义。

虽然它可能将服务和应用程序合并到一个可执行文件中,但让它正常工作并不是微不足道的。这也是一种不常用的方法,不常用。除非你有一个令人信服的理由来避免这样做,否则我建议你为你的服务使用一个单独的项目。

+0

所以,我需要创建2个项目?一个用于服务,另一个用于Windows窗体。真的建议当涉及到Windows服务创建一个单独的项目,而不是将其添加到现有的Windows窗体应用程序? – Polar

+0

如果Windows服务在一个单独的项目中,并且我在那里有一些我想稍后调用的方法,我可以调用它吗?恐怕如果不是,我有一些功能可以拨打我的服务。 – Polar

+0

您可以将常用功能移到库中。 –

相关问题