.Net Windows Service与MSVCR120_CLR0400.dll异常崩溃
问题描述:
我们在Windows Server 2008 r2标准的生产服务器中安装了Windows服务,并在其中安装了.NET Framework 4.5.2版。.Net Windows Service与MSVCR120_CLR0400.dll异常崩溃
事件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服务有什么问题,或者我该怎么做才能找到问题? 谢谢。
答
你的代码可能与Enumerables不正确处理。为了找到问题的根源,我建议订阅unhanded异常,并尽可能多的细节写的,你可以到日志:
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();
}
答
我张贴了这个问题之后,我们意识到,我们已经我们以前编译的x86运行平台代码的TeamCity发布代码到服务器。在发布之后,发生了这个问题。但是我们应该用x64平台完成这个发布,因为我们的服务器是64位的。 在意识到这一点之后,我们再次从Visual Studio中发布发布包,并设置了发布模式和混合平台。
两周来,问题再也没有发生过,所以我想分享这个解决方案。总之,这是因为我们的发布包的运行平台混乱。如果你遇到过这个问题,可能你应该检查你的发布包运行平台。