В каком именно порядке магазина установлено приложение запуска / активации UWP? (HANG_ACTIVATION сообщает об исследовании) - PullRequest
0 голосов
/ 01 октября 2019

Недавно я столкнулся со странной проблемой: увеличилось число отчетов 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 - хороший подход, чтобы избежать будущих проблем?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...