Недавно я столкнулся со странной проблемой: увеличилось число отчетов HANG_ACTIVATION при невозможности доступа к серверам Microsoft при запуске. По данным MS Dashboard, многие наши пользователи не смогли запустить приложение на своих устройствах. Я обнаружил, что проблема была вызвана неудачными запросами (POST https://licensing.mp.microsoft.com/v7.0/licenses/leases/renew
- один из них также лазурных запросов на покупку) к серверам Microsoft, однако, когда вы запускаете приложение из Visual Studio или отключаете подключение к Интернету, приложение запускается просто нормально, что былоопределенно проблема, связанная с некоторыми службами Windows Store.
После некоторых дальнейших исследований отчетов, я предполагаю, что проблема возникает, когда приложение долгое время не вызывало событие onActivate. Оказывается, некоторые службы Windows отслеживают время от запуска приложения до события Activation, а затем закрывают приложение по таймауту. К сожалению, было трудно найти какую-либо документацию по этому вопросу (, пожалуйста, укажите мне, если вы знаете, где я могу найти какую-либо информацию по этому ). Мне удалось воспроизвести такое же поведение при размещении sleep для событий onLaunch и onActivate продолжительностью ~ 2 минуты. Кроме того, согласно диагностике сетевых запросов, существует некоторое количество попыток для MS-запросов (когда я тестировал другое приложение, у меня был успешный запуск даже при неудачных запросах).
У меня много кода инициализации после запуска и до включения onActivationЭтот процесс инициализации может занять до 1 минуты для запуска приложения. Вот почему я думаю, что это перемещение может помочь решить проблему, но я не совсем точно знаю, как активация работает под капотом.
Типичный отчет панели управления:
Frame Image Function Offset
0 3D4Medical.comLLC.CompleteAnatomy HANG_ACTIVATION 0x0000000000000000
1 unknown.dll [.ecxr] 0x0000000000000000
2 ntdll.dll NtWaitForMultipleObjects 0x0000000000000000
3 KERNELBASE.dll WaitForMultipleObjectsEx 0x0000000000000000
4 combase.dll MTAThreadWaitForCall 0x0000000000000000
5 combase.dll MTAThreadDispatchCrossApartmentCall 0x0000000000000000
6 combase.dll CSyncClientCall::SendReceive2 0x0000000000000000
7 combase.dll CSyncClientCall::SendReceive 0x0000000000000000
8 combase.dll NdrExtpProxySendReceive 0x0000000000000000
9 rpcrt4.dll NdrClientCall2 0x0000000000000000
10 combase.dll ObjectStublessClient 0x0000000000000000
11 combase.dll ObjectStubless 0x0000000000000000
12 twinapi.appcore.dll Windows::ApplicationModel::Core::CoreApplicationViewAgileContainer::ActivateInternal 0x0000000000000000
13 twinapi.appcore.dll Windows::ApplicationModel::Core::CoreApplicationViewAgileContainer::Activate 0x0000000000000000
14 twinapi.appcore.dll Windows::ApplicationModel::Core::CoreApplication::ActivateForeground 0x0000000000000000
15 twinapi.appcore.dll Windows::ApplicationModel::Core::CoreApplication::ActivateApplication 0x0000000000000000
16 twinapi.appcore.dll Windows::ApplicationModel::Core::ApplicationActivationFactory::Activate 0x0000000000000000
17 rpcrt4.dll Invoke 0x0000000000000000
18 rpcrt4.dll NdrStubCall2 0x0000000000000000
19 combase.dll CStdStubBuffer_Invoke 0x0000000000000000
20 rpcrt4.dll CStdStubBuffer_Invoke 0x0000000000000000
21 combase.dll ObjectMethodExceptionHandlingAction__lambda_ee1df801181086a03fa4f8f75bd5617f_ _ 0x0000000000000000
22 combase.dll DefaultStubInvoke 0x0000000000000000
23 combase.dll ServerCall::ContextInvoke 0x0000000000000000
24 combase.dll AppInvoke 0x0000000000000000
25 combase.dll ComInvokeWithLockAndIPID 0x0000000000000000
26 combase.dll ThreadInvoke 0x0000000000000000
27 rpcrt4.dll DispatchToStubInCNoAvrf 0x0000000000000000
28 rpcrt4.dll RPC_INTERFACE::DispatchToStubWorker 0x0000000000000000
29 rpcrt4.dll RPC_INTERFACE::DispatchToStubWithObject 0x0000000000000000
30 rpcrt4.dll LRPC_SCALL::DispatchRequest 0x0000000000000000
31 rpcrt4.dll LRPC_SCALL::HandleRequest 0x0000000000000000
32 rpcrt4.dll LRPC_ADDRESS::HandleRequest 0x0000000000000000
33 rpcrt4.dll LRPC_ADDRESS::ProcessIO 0x0000000000000000
34 rpcrt4.dll LrpcIoComplete 0x0000000000000000
35 ntdll.dll TppAlpcpExecuteCallback 0x0000000000000000
36 ntdll.dll TppWorkerThread 0x0000000000000000
37 kernel32.dll BaseThreadInitThunk 0x0000000000000000
38 ntdll.dll __RtlUserThreadStart 0x0000000000000000
39 ntdll.dll _RtlUserThreadStart 0x0000000000000000
В целом там 2 вопроса Я хотел бы найти ответы:
- Правильно ли я понимаю процесс запуска установленного в Магазине приложения?
- Перемещается ли код инициализации - из раздела после onLaunchраздел после OnActivate - хороший подход, чтобы избежать будущих проблем?