我正在尝试使用C#编写一个Windows服务,它应该始终运行。如果发生崩溃或关闭,则应自动重新启动。我考虑使用Service Controller类,但问题是如何处理Service Controller和Service同时崩溃的情况。
在Windows中是否有看门狗功能,可以注册并负责服务的启动?
我正在尝试使用C#编写一个Windows服务,它应该始终运行。如果发生崩溃或关闭,则应自动重新启动。我考虑使用Service Controller类,但问题是如何处理Service Controller和Service同时崩溃的情况。
在Windows中是否有看门狗功能,可以注册并负责服务的启动?
除了上述推荐的模式外,可能订阅appdomain.unhandledexception事件捕获未处理的异常是个好主意。并卸载应用程序域,这样Windows服务管理器将启动恢复过程。
AppDoamin.currentAppDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler);
void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
Environment.Exit(-1);
}
try
{
// core code here.
}
catch (Exception ex)
{
// log it for debugging and swallow so that service doesn't crash.
}
这可以确保您的服务始终运行。代码不会使其崩溃,并且当机器重新启动等情况发生时,服务会自动启动。