VS2017并在Win7/XP上缺少"api-ms-win-core-rtlsupport-l1-2-0.dll"

Mul*_*deR 7 c++ windows-xp visual-studio windows-7 visual-studio-2017

将我的一些程序从VS2015移植到VS2017之后注意到二进制文件不再在Windows 7或Windows XP上运行 - 即使它们已经使用v141_xp工具集编译.该程序无法启动丢失的DLL api-ms-win-core-rtlsupport-l1-2-0.dll(注意2).

我很清楚那些api-ms-win-*DLL属于UCRT,从VS2015开始,我必须从Windows 10 SDK(可Redist\ucrt\DLLs在Windows 10 SDK目录中找到)重新分发UCRT DLL ,以及我的应用程序 - 只需重新分配vcruntime140.dllmsvcp140.dll足够的.但只有api-ms-win-core-rtlsupport-l1-1-0.dll在我的Windows SDK目录中,但没有 api-ms-win-core-rtlsupport-l1-2-0.dll.我刚刚下载并重新安装了最新的Windows SDK(10.0.15063).仍然没有相关的DLL!

我还尝试通过VC_redist.x86.exe从Visual Studio网站(14.11.25325)下载的最新版本在Windows 7(或XP)机器上安装VS2017 Redistributable软件包.显然,将api-ms-win-*DLL 复制到"System32"目录中.但是,只是api-ms-win-core-rtlsupport-l1-1-0.dll,但不是 api-ms-win-core-rtlsupport-l1-2-0.dll.应用仍然无法启动: - /

有任何想法吗?

谢谢和最诚挚的问候,
MuldeR

在此输入图像描述

在此输入图像描述


[编辑]

这当然只适用于我链接DLL运行时(/MD).如果我链接到"静态"运行时(/MT)我得到一个二进制文件,在UCRT 上没有 DLL依赖,并在Windows 7和XP上运行正常.


[编辑#2]

请参考我的其他帖子(包括EDIT)来解决这个问题:https:
//stackoverflow.com/a/45773325/1766377

Mul*_*deR 6

好的,这很有意思:刚才我的VS2017发现了一个新的更新.显然,我的VS2017从v15.2升级v15.3.1.看来,运行时库也已更新!

现在有2个目录,VC\Redist\MSVC\14.11.25325 VC\Redist\MSVC\14.11.25415我的VS2017里面安装目录.将vcruntime140.dll在两个目录存在.但较新版本(25415,右)与版本(25325,左)相比具有完全不同的依赖关系:

在此输入图像描述  
只有"新"版本具有Windows 7中缺少的依赖项.因此,我应该使用"旧"版本.但这意味着我已经锁定了"旧"版本.这是正常的吗?

(BTW:从VS2017两个DLL版本v15.3.1较新的一个比我原来把从v15.2)

此致,
MuldeR


[编辑]

所以,这只是引起了我的注意,有一个微妙的区别VC\Redist\MSVC\14.11.25325 VC\Redist\MSVC\14.11.25415目录:该目录25415具有内部调用另一个子文件夹中的所有DLL文件onecore,另外一个没有.显然,这意味着"较新的"DLL版本(具有onecore子文件夹的版本)应该与普通的桌面应用程序一起重新分发; 它们严格用于"OneCore"移动/物联网平台.

结论:
M $在设计Redist目录结构方面做得很好,尽可能让人感到困惑.把"正常"的版本号,并在该目录层次结构的同一级别的"onecore"可再分发(而不是独立的onecore,并desktop在目录上水平)表明,这些目录代表了不同版本的同一件事-这是不是案件: - /

Do*not**/onecore/*使用普通桌面应用程序重新分发任何DLL!