EventID 1002:C++ MFC应用Microsoft Store更新后挂起问题咨询
C++ MFC应用Microsoft Store更新挂起问题排查
问题背景
我开发了一款C++ MFC应用,通过Microsoft Store进行更新时会出现挂起情况,更新完成后无法继续运行。推测应用的主UI线程出现了阻塞(未更新时应用运行正常)。
核心问题
- 如何确保应用在更新后能够持续运行?
- 有哪些方法可以模拟更新过程,例如向应用发送Windows消息、调用相关API等?
复现步骤
- 在Windows 10系统上启动该应用
- 打开Microsoft Store,进入“库”页面,点击“获取更新”
复现结果
- 更新下载过程中应用保持运行状态
- 应用被终止,且未自动重启
- Windows事件日志中出现如下条目:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> - <System> <Provider Name="Application Hang" /> <EventID Qualifiers="0">1002</EventID> <Version>0</Version> <Level>2</Level> <Task>101</Task> <Opcode>0</Opcode> <Keywords>0x80000000000000</Keywords> <TimeCreated SystemTime="2024-05-20T20:18:03.1169635Z" /> <EventRecordID>6018</EventRecordID> <Correlation /> <Execution ProcessID="0" ThreadID="0" /> <Channel>Application</Channel> <Computer>win10</Computer> <Security /> </System> - <EventData> <Data>App.exe</Data> <Data>1.0.0.1</Data> <Data>289c</Data> <Data>01daa70704524710</Data> <Data>4294967295</Data> <Data>C:\Program Files\WindowsApps\....</Data> <Data>some guid</Data> <Data>....</Data> <Data>App.exe</Data> <Data>Quiesce</Data> <Binary>510075006900650073006300650000000000</Binary> </EventData>
额外疑问
Microsoft Store使用何种机制终止应用?注:我的应用会拦截WM_CLOSE消息,将窗口最小化至系统托盘。
已尝试的测试方法
通过调用Windows API IsHungAppWindow()并结合Parallels的“不良网络”设置模拟弱网环境,测试应用是否会挂起。测试代码如下,结果显示应用未挂起(屏幕持续输出大量点):
#include <iostream> #include <windows.h> #include "Tchar.h" #include "winuser.h" #include <chrono> #include <iostream> #include <thread> int main() { using namespace std::chrono_literals; HWND h = ::FindWindow(NULL, _T("AppWindowName")); if (h) { std::cout << "Found Window!\n"; while (true) { BOOL r = IsHungAppWindow(h); if (r == TRUE) { std::cout << "app hang detected!!\n"; exit(0); } else { std::cout << "."; } std::this_thread::sleep_for(200ms);} } std::cout << "End!\n"; }
内容的提问来源于stack exchange,提问作者Wayne
相关产品推荐
相关产品推荐

