运行我正在处理的 UWP 项目时,我收到以下对话框。
“无法激活 Windows 应用商店应用程序‘MyAppsMangledName’。‘MyExeName’进程已启动,但激活请求失败并出现错误‘应用程序未启动’。”
Visual Studio 输出具有以下内容。
线程 0x3d4c 已退出,代码为 -1073741515 (0xc0000135)。
线程 0x3b50 已退出,代码为 -1073741515 (0xc0000135)。
程序“MyExeName”已退出,代码为 -1073741515 (0xc0000135)“未找到依赖的 dll”。
事件查看器有 3 个事件,它们基本上以 3 种不同的方式重述弹出对话框,仅此而已。
在启动期间运行进程监视器向我显示许多 dll 已成功加载,但除了一些 NAMENOTFOUND 事件之外没有任何指示失败,不幸的是这些事件没有显示找不到什么名称。
在 Win32 中,一个有用的对话框通常会指示无法加载哪个 dll。当然,对于 .Net 应用程序,融合日志可以非常直接地进行跟踪。但对于 Store/UWP 应用程序,我似乎找不到追踪违规依赖项的好方法。
最佳答案
这对我正在从事的项目也产生了影响。经过大量挖掘,我团队中的某个人能够弄清楚。所以我想我会分享给其他在同样问题上苦苦挣扎的人。
我们正在使用 VS2015 使用 C++ 进行 UWP。因此,考虑到这一点,有一个名为 gflags 的程序位于 C:\program Files (x86)\Windows Kits 10\Debuggers\x64\gflags.exe
所以你需要一个带有管理员的 cmd 窗口,然后运行命令 gflags.exe -i your-program-name.exe +sls
注意:gflags 不在我的路径中,因此请在执行命令之前添加路径或导航到它所在的位置。
只需传入不带目录的 exe 名称即可。它所做的是为 VS 设置一个注册表设置,该设置打开 sls(显示加载程序快照)以使 exe 匹配该名称。然后在 VS 中运行您的应用程序,您将获得大量 dll 加载信息,包括无法在输出窗口中加载的 dll 的名称。在我们的例子中是这样的:
5038:34f4 @ 789320468 - LdrpProcessWork - 错误:无法加载 DLL:“vccorlib140d_app.DLL”,父模块:“E:\projects---\Source\Builds\vs2015_Debug_UWP_x64\AppX---.exe”,状态:0xc0000135
另一种更快的测试方法(YMMV)是将输出与另一个有效的构建配置进行比较。在我们的例子中,我们可以很好地运行发布版本,但调试版本是 barf。发布输出显示 vccorlib140_app.dll 在调试丢失时加载。
关于visual-c++ - 如何确定在 Windows 应用商店/通用应用程序中无法加载哪个 Dll 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36315538/