微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的Windows服务在大约5秒后自动退出?

我已经创build了一个使用C#的Windows服务,当调用OnStart时,从另一个类创build一个新的线程。 这个新的线程然后循环等待任何传入的TCP连接。 或者它应该。 当我开始服务时,它会在大约5秒后自动停止。 我不知道为什么这样做。 我明白,如果他们没有工作要做,但是工作已经明确,服务就会自行closures。 任何人有任何想法,为什么会发生这种情况? 我的OnStart方法如下所示:

protected override void OnStart(string[] args) { Thread thread = new Thread(new StateMachine().AcceptConnections); thread.Start(); }

然后调用这个方法

Int32 port = 13000; IPAddress localAddr = IPAddress.Parse("127.0.0.1"); server = new TcpListener(localAddr,port); // Start listening for client requests. server.Start(); // Enter the listening loop. do { client = server.AcceptTcpClient(); ReceivedData(); } while (true); }

它不能保持足够长的时间来允许任何客户端连接到TcpListner。

帮帮我?

C ++堆栈跟踪问题

我怎样才能使用WMI获得卷GUID?

只能改变过程Firefox的音量,而不能改变其他音量

ControlSend使用SetKeyDelay时,随机发送错误字符(修改和未修改),0,0

如何在Windows注销后继续运行C#应用程序

C ++:在SIGINT之后继续执行

GetSystemMetrics(SM_CYVIRTUALSCREEN)返回不正确的高度?

SetDIBits可以直接绘制到屏幕或显示器?

什么时候BOOL和BOOL应该用在C ++中?

在Windows Vista> 8上获取用户帐户configuration文件图片

首先,你确定你想要你的服务产生一个新的线程来做到这一点? 你不能简单地在主线程上做?

要调试您的问题,请执行以下一项或两项操作:

使用EventLog或日志框架(Log4Net)添加一些日志记录。

作为一个控制台应用程序运行您的服务,并在Visual Studio中进行调试

首先,请确保您的应用程序代码在没有设置为服务时运行正常。 如果您的代码在没有设置为服务时运行正常,我的猜测是您的OnStart出于某种原因耗时过长。 如果你不能加快速度,这里的信息可以让你处理必要的启动延迟。

在Win32中,您必须通过定期通知服务控制管理器(SCM)启动(和停止)进程来更新服务状态 ,否则它会认为您的服务已挂起并将其终止。 如果初始化需要很长时间,您可能只需要执行一次,或者在定时器上执行此操作。 当你的启动(停止)逻辑正在进行时,你告诉SCM你处于START_PENDING(STOP_PENDING)状态,一旦完成,你告诉它你处于STARTED(STOPPED)状态。

在托管的世界里,这个目标是通过调用ServiceBase.RequestAdditionalTime来实现的。 这里有一个关于这个主题的全面的概述。 钱报价:

这是您的托管服务需要注意的地方,以避免SCM将您的服务标记为无响应。

您不必显式更新状态; 当您的OnStart或OnStop方法完成时,ServiceBase会为您执行此操作

如果您希望OnX方法超出超时时间,则必须调用RequestAdditionalTime。

对我知道了。 我正在做一些愚蠢的配置文件,其中包括移动.exeXML配置文件错误的地方。 这导致了配置错误,并且服务不喜欢它。 尽管如此,我已经掌握并运行了。 所以感谢您的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐