如何解决C#Windows服务导入C ++ dll崩溃,事件ID:1000 clr.dll
我有一个Windows服务,可导入C ++ dll。如果我进行压力测试,则此Windows服务将直接崩溃,并带有事件ID:1000显示模块clr.dll但未记录任何异常。事件消息如下:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Application Error" />
<EventID Qualifiers="0">1000</EventID>
<Level>2</Level>
<Task>100</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2020-10-26T08:22:52.027599500Z" />
<EventRecordID>5246</EventRecordID>
<Channel>Application</Channel>
<Computer>computer</Computer>
<Security />
</System>
<EventData>
<Data>Server.exe</Data>
<Data>5.1.0.1</Data>
<Data>5f8d0a4f</Data>
<Data>clr.dll</Data>
<Data>4.7.3680.0</Data>
<Data>5f233da8</Data>
<Data>c0000409</Data>
<Data>0056aa27</Data>
<Data>1fc4</Data>
<Data>01d6ab1690751cd9</Data>
<Data>Server.exe</Data>
<Data>C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll</Data>
<Data>0772888d-b659-483c-b80b-d7b4de714636</Data>
<Data>
</Data>
<Data>
</Data>
</EventData>
</Event>
我尝试了一些方法:
<configuration>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>
</configuration>
[HandleProcessCorruptedStateExceptions]
[SecurityCritical]
Windows环境是Windows Server 2016 64位。 C ++ dll是x86,因此我使用x86 cpu-调试来构建项目。我怀疑C ++ dll导致崩溃的原因,但无法证明。
解决方法
看起来简单的解决方案是将调试器附加到服务。您可能需要以管理员身份启动Visual Studio,因为该服务可能是在非交互式登录下运行的。
“ CorruptedState”非解决方案是对IsBadReadPtr
的抛弃,if(meta.reflectee is _Override) {
print('Found!);
}
是Microsoft过去发明的另一种不可靠且不稳定的方法。在调试时,调试器是更好的解决方案。一旦发布给客户,两种方法都无法保证解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。