c# - 为什么我的 c# Windows 服务在没有任何消息写入应用程序事件日志的情况下停止运行?

标签 c# .net .net-4.0 windows-services windows-server-2003

我对 Windows 服务还很陌生。我为我的 c# Windows 服务创建了一个安装程序,并且服务器 (Windows Server 2003) 上的安装似乎有效。当它启动时,它会将 Service started successfully 写入日志。当它停止时,它会写入 Service stopped successfully。但是,有时服务会在没有向日志写入任何内容的情况下停止运行,所以我手动启动它。之后我查看日志时,它按预期显示 Service started successfully。奇怪的是,连续两次在日志中看到它显然缺少一个服务以某种方式停止运行的条目。

这可能是什么潜在原因?我将该服务设置为自动并将其安装为为所有用户运行。我的印象是,这意味着只要机器启动,服务就会自动启动。我怎样才能找出停止的原因?崩溃的服务会自动写入事件日志,还是我必须以它们记录自己的崩溃原因的方式处理异常?

编辑:一些附加信息:

  • 我已将其设置为以本地系统帐户登录
  • 在恢复选项下,我将其设置为在第一次失败时重新启动。对于第二次或随后的失败,我没有任何东西。

更新:一位回答者推荐了一个全局异常处理程序。虽然我不会将此作为永久修复来实现,但它至少会帮助我找出问题发生的位置。我实际上用我安装的服务测试了这个并且它有效。我发现未处理的异常实际上确实使服务崩溃而根本没有向日志写入任何内容。我认为它至少会报告一些应用程序错误,但事实并非如此。

static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    //other code here
}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Utilities.WriteIt(e.ExceptionObject as Exception);
}

最佳答案

处理异常总是最好的。至少使用全局异常处理程序并将其写入日志文件

关于c# - 为什么我的 c# Windows 服务在没有任何消息写入应用程序事件日志的情况下停止运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10685333/

相关文章:

c# - 将日期时间 js 转换为 c#

c# - 以编程方式扩展 DataGrid ColumnHeaderStyle

wpf - 如果 Prism 模块崩溃会怎样?应用还稳定吗?

c# - 创建一条错误消息,报告C#应用程序内部任何地方的崩溃

c# - NPOI 将范围复制到另一个工作表

c# - 如何以编程方式清除 Windows 下的回收站?

c# - 远程回调对象生命周期

c# - dotnet restore 无法加载共享库 'libproc' 或其在 Mac OS 上的依赖项之一

c# - 在 C# 项目中自动包含文件

c# - Linq 中的 Row_number 超过(按 xxx 分区)?