簡體   English   中英

C# Windows 服務導入 C++ dll 崩潰,事件 ID:1000 clr.dll

[英]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>

我嘗試了一些方法:

  1. Windows更新
  2. 我的 C# 項目 app.config 添加
    <configuration>
       <runtime>
          <legacyCorruptedStateExceptionsPolicy enabled="true" />
       </runtime>
    </configuration>

以及使用C++ dll添加的函數

[HandleProcessCorruptedStateExceptions]
[SecurityCritical]
  1. 所有使用C++ dll的代碼都添加了try catch,但是Windows服務仍然崩潰,沒有記錄任何異常。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM