如何确定哪些DLL依赖项无法在Windows应用商店/通用应用中加载?

Dub*_*her 10 dll native visual-c++ windows-store-apps win-universal-app

运行我正在处理的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应用程序,我似乎无法找到一种很好的方法来追踪违规依赖.

Kri*_*ess 13

这对我正在研究的项目也是如此.经过大量挖掘,我团队中的某个人能够解决这个问题.所以我认为我会为那些在同样问题上苦苦挣扎的人分享它.

我们正在使用VS2015使用C++进行UWP.所以考虑到这一点,在C:\ program Files(x86)\ Windows Kits 10\Debuggers\x64\gfl​​ags.exe中有一个名为gflags的程序.

所以你需要一个带管理员的cmd窗口,并运行命令gflags.exe -i your-program-name.exe + sls

注意:gflags不在我的路径中,因此要么在执行命令之前添加路径或导航到它所在的位置.

只需传入没有目录的exe的名称.它的作用是为VS设置一个注册表设置,为exe匹配该名称打开sls(show loader snaps).然后在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已加载,而调试已丢失.