Привязка строки является недопустимым исключением при завершении работы приложения Windows

#c# #.net

#c# #.net

Вопрос:

При завершении работы приложения мы получаем следующее исключение из среды CLR:

 EXCEPTION_CODE: (NTSTATUS) 0xc0020001 - The string binding is invalid.
  

Стек вызовов полностью состоит из clr или другого кода Microsoft.

Похоже, что исключение возникает после выгрузки AppDomain, что затрудняет его исправление.

Я отладил исключение с помощью windbg, но это не дало никакого представления о том, как устранить проблему.

Вот список вызовов из windbg:

 STACK_TEXT:  
00000070`6578eaf0 00007ffd`b3d6c52f : 00000255`b843c210 00007ffd`c0a412d0 00007ffd`cd3cbc70 00000000`00000246 : KERNELBASE!RaiseException 0x69
00000070`6578ebd0 00007ffd`b37f2308 : 00000000`00000000 00000000`00000003 ffffffff`8007042b 00000000`00000000 : clr!UMThunkStubRareDisableWorker 0x3f
00000070`6578ec00 00007ffd`cbae625c : 00000000`014d0619 00000000`00000003 00000000`003f05a8 00000000`00000000 : clr!UMThunkStub 0x128
**00000070`6578ec90 00007ffd`cd3cfbf4 : 00000000`00000060 00007ffd`cbade3f9 00000000`00000000 00000000`00000038 : user32!_ClientCallWinEventProc 0x3c**
00000070`6578ed00 00007ffd`cb361064 : 00007ffd`cbaca5c3 00000070`6578edc0 00007ffd`cbb51070 00000000`00000000 : ntdll!KiUserCallbackDispatcherContinue
00000070`6578ed88 00007ffd`cbaca5c3 : 00000070`6578edc0 00007ffd`cbb51070 00000000`00000000 00000070`658ce000 : win32u!NtUserPeekMessage 0x14
00000070`6578ed90 00007ffd`cbaca523 : 00000000`00007fff 00000070`6578ef10 00000000`00000003 00007ffd`65aaa1a0 : user32!_PeekMessage 0x43
00000070`6578ee00 00007ffd`cb63d2e3 : 00000070`6578ef10 00000070`6578f0e0 00000000`0091087c 00000070`6578f180 : user32!PeekMessageW 0x143
00000070`6578ee70 00007ffd`cb63d24d : 00000070`6578f150 00000070`6578ef10 00000000`0091087c 00007ffd`00000400 : combase!CCliModalLoop::MyPeekMessage 0x53
00000070`6578eee0 00007ffd`cb63d42a : 00000000`00000000 00000070`6578f150 00000070`6578f2b4 00000000`00000001 : combase!CCliModalLoop::PeekRPCAndDDEMessage 0x49
00000070`6578ef50 00007ffd`cb63cddf : 00000070`6578f150 00000070`6578f0e0 00000000`00580040 00000070`6578f150 : combase!CCliModalLoop::FindMessage 0x46
00000070`6578efc0 00007ffd`cb5dc63a : 00000070`6578f150 00000000`000136ea 00000070`6578f150 00000000`00000000 : combase!CCliModalLoop::HandleWakeForMsg 0x57
00000070`6578f060 00007ffd`cb638435 : 000000e1`da3b87b5 00000255`b4ce4930 00000000`05c86998 00000070`6578f270 : combase!CCliModalLoop::BlockFn 0x2de
00000070`6578f120 00007ffd`cb5c3c06 : 00000000`00000002 00007ffd`cd364b00 00000000`00000020 00007ffd`cd37a880 : combase!ClassicSTAThreadWaitForHandles 0xa5
00000070`6578f240 00007ffd`b38e0f0d : 00000000`00000001 00000070`6578f399 00000000`00000001 00000000`00000000 : combase!CoWaitForMultipleHandles 0x76
00000070`6578f280 00007ffd`b38e0f8c : 00000000`00000000 00000000`00000001 00000255`b843c210 00000000`00000000 : clr!MsgWaitHelper 0x8e
00000070`6578f2f0 00007ffd`b3839659 : 00000255`b843c210 00000000`00000001 00000000`00000001 00000000`00000000 : clr!Thread::DoAppropriateWaitWorker 0x2e6
00000070`6578f3f0 00007ffd`b3843e5d : 00000255`b4ce4930 00000000`00000001 00000000`00000001 00000000`00000000 : clr!Thread::DoAppropriateWait 0x7d
00000070`6578f470 00007ffd`b38f8089 : 00000070`6578fa50 00000000`00000000 00000000`00013880 00000070`6578fa50 : clr!CLREventBase::WaitEx 0xb6
00000070`6578f500 00007ffd`b38f7fde : 00000000`05c86802 00000070`6578f550 00000000`00000010 00000070`6578fa50 : clr!WaitForEndOfShutdown_OneIteration 0x9a
00000070`6578f5a0 00007ffd`b39e4d7b : 00000000`00000010 00000070`6578fa50 00000000`00000000 00000000`00000001 : clr!WaitForEndOfShutdown 0x1a
00000070`6578f5d0 00007ffd`b38fbc01 : 00000000`00000006 00000070`00001630 00000000`00000000 00007ffd`c0c20000 : clr!EEShutDown 0xdc
00000070`6578f630 00007ffd`b3b1ad10 : 00000000`00000000 00000000`00000000 ffffffff`ffffffff 00000000`00000000 : clr!HandleExitProcessHelper 0x29
00000070`6578f660 00007ffd`beb1c020 : 00007ffd`b3b20450 00000000`00000000 00000000`00000001 00000255`b4856e60 : clr!ExternalShutdownHelper 0x5c
00000070`6578f690 00007ffd`c0c27580 : 00000000`00000000 00000000`00000000 00000070`00000001 00000000`00000000 : mscoreei!RuntimeDesc::ShutdownAllActiveRuntimes 0x170
00000070`6578f980 00007ffd`caf06e01 : 00000000`00000000 00007ffd`beb00000 00000000`00000000 00000070`6578fa50 : mscoree!ShellShim_CorExitProcess 0x130
00000070`6578f9b0 00007ffd`caecff54 : 00000000`00000000 00007ffd`c0c20000 00000070`6578fa38 00007ffd`cafa0e40 : ucrtbase!try_cor_exit_process 0x36e9d
00000070`6578f9e0 00007ffd`caecfdff : 00000000`00000000 00000000`00000000 00000000`00000000 00000070`6578fa30 : ucrtbase!exit_or_terminate_process 0x3c
00000070`6578fa10 00007ff6`d5d612cc : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000001 : ucrtbase!common_exit 0x6f`
  

При поиске по аналогичной проблеме было высказано предположение, что управляемый код выполняется после завершения работы clr, что вызывает проблему.
Не могли бы вы сообщить мне, как мы можем получить сведения об управляемой функции обратного вызова из аварийного дампа с помощью windbg, что может быть причиной проблемы?