我需要优雅地处理代码中的错误并停止服务。
protected override void OnStart(string[] args)
{
oMyObject = new MyObject(args);
if (oMyObject.RunStartup())
{
oThread = new Thread(new ThreadStart(oMyObject.MainLoop));
oThread.Start();
}
base.OnStart(args);
}
oMyObject.RunStartup()向事件日志写入错误,如果错误则返回false。
但是,服务没有停止,事件日志显示"服务已成功启动。"
如何在OnStart()中退出和停止服务,而不显示事件日志"服务已成功启动"?
答案 0 :(得分:2)
您是否尝试过实施OnStop()
方法,而不是尝试在OnStart()
方法中检测停止?
然后,您应该能够创建ServiceController
实例并检查服务的Status
属性。
修改:抱歉这是@Lloyd答案的延伸(无法发表评论)。
<强>更新强>
实际上只是在Try
添加Catch
OnStart()
块时,应该足以捕获异常(请参阅关于OP的@Oded评论)并允许您关闭服务并记录您认为合适的事件日志。
答案 1 :(得分:0)
如果我记得你可以致电Stop()
,例如:
protected override void OnStart(string[] args)
{
oMyObject = new MyObject(args);
if (!oMyObject.RunStartup()) {
Stop();
return;
}
oThread = new Thread(new ThreadStart(oMyObject.MainLoop));
oThread.Start();
base.OnStart(args);
}
有关详细信息,请参阅此处:
http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.stop.aspx
答案 2 :(得分:0)
做Oded说的话。抛出和异常并且不抓住它是目前处理此问题的最佳方法。