【问题标题】:C# Windows service self terminate serviceC# Windows 服务自终止服务
【发布时间】:2011-08-01 05:44:17
【问题描述】:

如何让服务自行终止?

Environment.Exit 将导致应用程序启动但服务保持运行。

有什么想法吗?

【问题讨论】:

    标签: c# windows-services


    【解决方案1】:

    您可以使用 SCM 从服务本身中关闭您的服务:

    System.ServiceProcess.ServiceController svc = new System.ServiceProcess.ServiceController("NameOfYourService");
    svc.Stop();
    

    编辑:

    另一种选择是在您的服务中调用ServiceBase.Stop() - 如果您可以访问您的ServiceBase 派生类实例,那将是更简洁的方法 - 在许多情况下,尽管必须传递这种依赖关系,但它很麻烦.

    如果您有未捕获的异常,我个人只会让服务崩溃(或记录它然后throw),这将在事件日志中留下一条消息,详细说明终止原因。如果您绝对需要,您可以捕获异常,然后调用ServiceBase.Stop()

    【讨论】:

    • 我可以在启动服务的类之外的异常中使用它吗?
    • @Mike:更新了更多解释 - 不确定我在“异常内部”部分是否理解正确 - 你能解释一下吗?
    • 好吧,我有一个 try{} catch{},它被封装在一段时间内{}。问题是如果此尝试失败,我需要停止整个服务。我调用服务在 Service1.cs 上停止,我需要这发生在不同的类中
    • @Mike:这其中的哪一部分不起作用?如果Service1 派生自ServiceBase,您可以添加一个公共方法,然后调用base.Stop() - 或者如果您不想要或不引用Service1,您可以使用SCM。
    • so on service1.cs 我把这个 public static void ForceStop() { Service1.ForceStop(); Environment.Exit(1);那么我可以从我的 catch{Service1.ForceStop()} 中的其他类调用它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2019-10-08
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多