诊断 Interop 调用在 C# 桌面应用程序上挂起 - 仅适用于某些用户

Diagnosing Interop call hang on C# desktop app - only for some users

我们有一个 C# 桌面应用程序 (Windows 10 x64) 在启动时挂起 我们的一小部分用户。这个我没见过,本地也无法复现。

我们的应用程序使用我们的 C#(托管)库,其中包括对我们的 C(本机)DLL 的一些互操作调用。 通过检测特殊构建和用户的慷慨帮助,我已经能够确定:

这只会对少数用户失败,同样的代码已经过测试和调试,并且对成千上万的用户运行良好。

任何人都可以提供有关如何远程诊断的建议吗?

这原来是一个特定的第 3 方 DLL 在加载时挂起(CRT 启动或 DLL 主)。我们对 DLL 依赖项的版本、DLL 搜索路径等做了很多检查。但我们从未确切地弄清楚问题是什么;只有一个特定的 DLL(在我们的系统上加载良好)会锁定我们用户系统的一小部分。

解决方案是获取更新版本的 DLL。这组特定的第 3 方库是使用非 Microsoft 工具构建的,因此它们的编译器或链接器中可能存在一些细微的错误。