[英]C# Windows Service Import C++ dll Crash with Event ID: 1000 clr.dll
我有一個導入 C++ dll 的 Windows 服務。 如果我做壓力測試,這個 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>
以及使用C++ dll添加的函數
[HandleProcessCorruptedStateExceptions]
[SecurityCritical]
Windows 環境為 Windows Server 2016 64 位。 C++ dll 是 x86,因此我使用 x86 CPU - debug 來構建項目。 我懷疑是 C++ dll 導致崩潰的原因,但無法證明。
看起來簡單的解決方案是將調試器附加到服務。 您可能需要以管理員身份啟動 Visual Studio,因為該服務可能在非交互式登錄下運行。
“CorruptedState”非解決方案是對IsBadReadPtr
的回歸,這是微軟過去發明的另一種不可靠和不穩定的方法。 在調試時,調試器是更好的解決方案。 一旦發布給客戶,這兩種方法都不能保證能解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.