1

我的问题是我目前正在将一个相当大的库从 Win32 移植到 UWP。到目前为止,我设法解决了许多问题,并且该应用程序在我的 Windows 10 桌面上运行良好,但在 Xbox One 上却没有这样做。

我已经将链接器路径更改为他们的商店挂件,因此我们不会针对 win32 api 进行编译,但只有商店中可用的 api,但它总是可能是我错过了一些东西。

现在问题是明显的“找不到依赖的 dll (0xc0000135)”,我无法使用调试器捕获它,因为它发生在 ntdll 加载 exe 的加载时间。

我知道这里概述的常见故障排除步骤如何确定 Windows 应用商店/通用应用程序中无法加载哪个 Dll 依赖项?

所以我使用了 Dependency Walker,它表明我的 DLL 实际上只依赖于 kernel32.dll、ws2_32.dll、vccorlib140_app.dll、vcruntime140_app.dll 和许多 API-MS-WIN-CRT-**.dll 形式的 dll。

据我了解,这应该没问题,但是进一步挖掘我发现 kernel32.dll 依赖于 API-MS-WIN-EVENTING-PROVIDER-L1-1-0.DLL,而 API-MS-WIN-EVENTING-PROVIDER-L1-1-0.DLL 又依赖于禁止的 advapi32.dll 并因此依赖于 user32。 dll

不过,我不知道这是否正确,因为在 xbox kernel32.dll 上会有其他依赖项。

我还使用了进程监视器,这表明 Kernelbase.AppHost.dll 将是问题所在,因为最后确认加载的 dll 是 sechost.dll 和 vc++ 运行时。之后会有 kernel.appcore.dll 和可能的 msvcrt.dll。

我知道 gflags.exe +sls,这将是我需要的,但在 Xbox 上不起作用。实际上,我通常缺少一种在 Xbox 上进行良好调试的方法,我什至无法列出所有文件以查看哪些 dll 存在,哪些不存在。

那么请问,有没有人知道我如何执行额外的检查来找出失败的原因?

顺便说一句,我尝试在 DLL 上使用 LoadLibrary() 而不是隐式链接它们,这导致 GetLastError 即使在 PC 上也是 1114(无法初始化),所以有些东西肯定很奇怪。

4

0 回答 0