繁体   English   中英

.Net Windows服务因MSVCR120_CLR0400.dll异常而崩溃

[英].Net Windows Service Crashes with MSVCR120_CLR0400.dll exception

我们在生产服务器中有一个Windows服务,该服务是Windows Server 2008 r2标准,并在其中安装了.net Framework 4.5.2版。 服务在上周突然停止两次,出现以下事件查看器来源的异常:

事件ID:1026,.net运行时异常:

Application: XXX.Application.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
  at System.Buffer.__Memcpy(Byte*, Byte*, Int32)
   at System.Buffer.__Memcpy(Byte*, Byte*, Int32)
   at System.Buffer._Memcpy(Byte*, Byte*, Int32)
   at System.Buffer.Memcpy(Byte*, Byte*, Int32)
   at System.String.ToCharArray()
   at FluentValidation.Internal.Extensions+<>c__DisplayClassd`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<CoerceToNonGeneric>b__c(System.Object)
   at FluentValidation.Validators.PropertyValidatorContext.get_PropertyValue()
   at FluentValidation.Validators.AbstractComparisonValidator.IsValid(FluentValidation.Validators.PropertyValidatorContext)
   at FluentValidation.Validators.PropertyValidator.Validate(FluentValidation.Validators.PropertyValidatorContext)
   at FluentValidation.Internal.PropertyRule+<Validate>d__8.MoveNext()
   at System.Linq.Enumerable+<SelectManyIterator>d__14`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].MoveNext()
   at System.Collections.Generic.List`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]..ctor(System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at System.Linq.Enumerable.ToList[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at FluentValidation.AbstractValidator`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Validate(FluentValidation.ValidationContext`1<System.__Canon>)

赛事ID:1000

Faulting application name: XX.Application.exe, version: 2.1.0.5017, time stamp: 0x59b1865e
Faulting module name: MSVCR120_CLR0400.dll, version: 12.0.51209.34209, time stamp: 0x5348a2f4
Exception code: 0xc0000005
Fault offset: 0x0000000000001630
Faulting process id: 0x12a8
Faulting application start time: 0x01d3307a3a9dca66
Faulting application path: XX.Application.exe
Faulting module path: C:\Windows\system32\MSVCR120_CLR0400.dll
Report Id: 5ea7c0b6-a0f0-11e7-8d71-0050568c317d

我已经用谷歌搜索了一个星期,但没有得到任何答案。 您能帮我了解我们的Windows服务可能是什么问题,或者应该怎么做才能发现问题? 谢谢。

发布此问题后,我们意识到在将代码发布到服务器之前,已经使用teamcity的x86运行平台编译了代码。 发布之后,出现了此问题。但是,由于我们的服务器是64位的,因此我们应该在x64平台上完成此发布。 意识到这一点之后,我们将在Visual Studio中使用发布模式和混合平台再次设置发布包。

两个星期来,问题再也没有发生,所以我想分享那个解决方案。 总之,这是因为我们发布的软件包的运行平台混乱。 如果您遇到了这个问题,则应该检查发布包的运行平台。

您的代码可能无法正确处理Enumerables。 为了找到根本原因,我建议订阅未处理的异常,并在日志中尽可能详细地写出详细信息:

    public static void Start() { 
AppDomain currentDomain = AppDomain.CurrentDomain;
 currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException);
 running = true; 
ThreadStart ts = new ThreadStart(ServiceThreadBody);
 thread = new Thread(ts);
 thread.Name = "ServiceThread";
 thread.Priority = ThreadPriority.BelowNormal;
 thread.Start(); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM