。
到目前为止,所有这些人的工作正常。最近,我们切换到使用了MSVC2022和14.42.34433.0
版本的运行时版本(非常新的)。现在,我们正在从用户那里获得崩溃转储。没有太多(每1000个用户约1个),具有以下堆栈跟踪:
msvcp140.dll!00007ffa1d488c34() Unknown
myapp.exe!std::_Mutex_base::lock() Line 52 C++
myapp.exe!std::unique_lock<std::mutex>::{ctor}(std::mutex &) Line 144 C++
我们已经分析了所有这些报告,并发现所有这些报告中的MSVC运行时DLL都从
C:\Windows\System32
文件夹加载,而不是从我们的应用程序夹中加载。这些运行时DLL比我们使用的DLL年龄太大(例如14.28.29910.0
或14.0.2415.1
)。看来它们与我们的应用程序构建不兼容二元。
Question:
的可能原因是这些系统的DLL被加载而不是我们的应用程序提供的DLL?
no默认情况下,Windows将在应用程序启动时遵循特定的搜索订单DLL: 包含可执行文件的目录
通常 - 清单中没有清单或不正确的版本表示默认行为,这意味着它将仅使用System32版本,该版本可能是版本14,而不是“正确”版本14.