以编程方式停止Windows服务时出错

时间:2011-05-09 21:08:34

标签: exception windows-services

我有一个Windows服务。在OnStart方法中,我正在执行一些操作,如果其中一个操作失败,我希望服务停止。在Catch块中,我正在编写下面提到的代码:

var srvc = new System.ServiceProcess.ServiceController("Scv1", "localhost");
srvc.Stop();
srvc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped);

它可以很好地完成工作,但是Windows会向我显示一个消息框:

---------------------------
Services
---------------------------
The xxx service on Local Computer started and then stopped. Some services stop automatically if they are not in use by other services or programs.
---------------------------
OK   
---------------------------

我在这里做错了吗?我如何压制消息框?

2 个答案:

答案 0 :(得分:0)

我在C#中创建了一个基本测试服务,在Windows 7上安装它,然后尝试启动它。

using System.ServiceProcess;

public class MyService : ServiceBase
{
  static void Main()
  {
    System.ServiceProcess.ServiceBase.Run( new MyService() );
  }

  protected override void OnStart( string[] args )
  {
    bool failed = true;
    // Do stuff...
    // Oops, we failed! Time to stop!
    if( failed ) {
      base.Stop();
      return;
    }
    base.OnStart( args );
  }
}

如果失败,是的,我确实看到了您描述的消息框。此消息框不是您的服务的一部分 - “服务”窗口显示该消息。如果要打开管理员命令提示符并键入以下内容:

net start Scv1

然后您会看到基于文本的错误消息而不是消息框。

在任何一种情况下,您都在运行一个程序,要求SCM启动您的服务。您的服务无法启动。该失败被报告给该计划。程序决定显示错误消息以通知用户。那是你无法控制的。

答案 1 :(得分:0)

您实际上可以检查事件处理程序。它会让你知道你在配置文件中所犯的错误。配置文件中的一些语法错误将是此类消息框的原因。