Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动重新启动windows服务_C# - Fatal编程技术网

C# 自动重新启动windows服务

C# 自动重新启动windows服务,c#,C#,我正在尝试用C#创建一个窗口服务,它应该一直运行。如果发生崩溃或关机,则应自动重新启动。我考虑过使用服务控制器类,但问题是如何处理服务控制器和服务同时关闭的情况。 Windows中是否有我可以注册并负责服务启动的看门狗功能?这里推荐的一种模式是将服务启动选项设置为“自动”,并确保服务的核心功能包装在try/catch块中 try { // core code here. } catch (Exception ex) { // log it for debugging and swallo

我正在尝试用C#创建一个窗口服务,它应该一直运行。如果发生崩溃或关机,则应自动重新启动。我考虑过使用服务控制器类,但问题是如何处理服务控制器和服务同时关闭的情况。
Windows中是否有我可以注册并负责服务启动的看门狗功能?

这里推荐的一种模式是将服务启动选项设置为“自动”,并确保服务的核心功能包装在try/catch块中

try 
{
 // core code here.
} 
catch (Exception ex)
{
 // log it for debugging and swallow so that service doesn't crash.
}

这可以确保您的服务始终运行。代码不会崩溃,当机器重新启动时,该服务是自动启动的。

< P>您可以考虑使用服务的恢复选项。在运行services.msc时,可以通过服务的属性进行设置


请查看和以获取更多信息。

添加到上述推荐模式中,可能是一个好主意 通过订阅appdomain.unhandledexception事件捕获未处理的异常。 并卸载应用程序域,以便windows服务管理器 启动恢复程序

AppDoamin.currentAppDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler);


void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
       Environment.Exit(-1);
}

只是一个想法:可能是每分钟执行控制台应用程序的windows计划任务可以检查服务状态,如果不运行就启动可能重复的吞咽异常是不可能的。@fsimonazzi应该更清楚。控制台应用程序、windows服务等的最外层块需要防范未处理的异常。。因为这个过程会以其他方式消亡。防止此类未经处理的崩溃的一种可能方法是在最外层放置try/catch,并清楚地记录异常。基本上处理异常。(不是吞下它)我上面的回答是为了解释如何处理它。。我之所以用“吞咽”这个词,是因为我们没有扔它,也没有让它冒泡。我们正在处理它。根据我的经验,这仍然是一个禁忌。你最好将服务设置为自动重启(见@pepo的答案)并终止可执行文件。那么你就有了一个干净的开始。我花了很多时间调试由“处理”和内部重新启动服务引起的问题,在我看来,这不值得。