从服务重新启动Windows服务

时间:2009-12-06 17:20:11

标签: .net windows-services

有没有办法从同一服务重启Windows服务,如Windows窗体中的Application.Restart(),我不想从服务启动另一个进程来重启服务。

2 个答案:

答案 0 :(得分:1)

我是一个名为Daemoniq的开源Windows服务托管框架的开发人员。 Setting service recovery options是其功能之一。您可以从http://daemoniq.org

下载

目前的功能包括:

  • 通过CommonServiceLocator
  • 与容器无关的服务位置
  • 通过app.config
  • 设置serviceName,displayName,description和serviceStartMode等公共服务属性
  • 在同一进程上运行多个Windows服务
  • 通过app.config设置恢复选项
  • 依据via app.config
  • 设置服务
  • 通过命令行
  • 设置服务流程凭据
  • 通过命令行安装,卸载,调试服务

谢谢!

答案 1 :(得分:0)

您还可以在安装项目中将自定义操作添加到自定义操作的提交文件夹中。它必须是类库项目的主要输出,其类继承自System.Configuration.Install.Installer并具有[RunInstaller(true)]属性。在这个类中,您需要覆盖一个基本方法:

    public override void Commit(IDictionary savedState)
    {
        base.Commit(savedState);
        ProcessStartInfo psi = new ProcessStartInfo("sc", "failure \"You service name\" reset= 60 actions= restart/1000");
        psi.CreateNoWindow = true;
        Process proc = Process.Start(psi);
        proc.WaitForExit();
    }

它将您的服务配置为在失败后自动重启。

与您需要重新启动服务时相比,您可以

Environment.FailFast("Self restarting service...");

但它有一个缺点 - 它将在事件日志中触发错误消息。