您的计算机缺少api-ms-win-core-winrt-string-l1-1-0.dll

时间:2016-07-20 10:52:42

标签: c++ .net windows visual-studio win-universal-app

我正在编写一个需要在Windows 7,8.x和10上运行的程序。该程序有一个(相对较小的)功能,它依赖于仅在Windows 10上可用的Windows API。这个功能显然很明显不能在Win7上工作,在调用这些API之前,我确保当前的操作系统是Windows 10.

为了使用这些API,我不得不将我的VS2015项目配置为“使用Windows运行时扩展”(/ ZW)并将“目标平台版本”设置为10.0.10586.0。

然而,当我尝试在Windows 7上运行应用程序时,这会导致问题。我收到错误对话框,说“程序无法启动,因为api-ms-win-core-winrt-string-l1-1-您的计算机缺少0.dll“。我试图在Win7机器上安装VS2015可再发行组件包,但这并没有解决问题。

关于如何让它在Win7上运行的任何想法?我真的不想改变我的所有代码来动态加载所有Windows 10功能。

该程序是用C ++编写的,我使用的Windows API来自Windows.Devices.WifiDirect命名空间。

2 个答案:

答案 0 :(得分:1)

我最终通过将所有仅限Win10的API调用移动到使用/ ZW编译的代理DLL来解决此问题。然后我从主程序中删除了/ ZW开关,然后允许它在Windows 7下运行。当我的程序在Windows 10机器上运行时,代理DLL仅被加载(使用LoadLibrary()调用)。

这解决了这个问题。我确实必须为DLL编写一些代理函数,但是对于所有仅支持Win10的API调用来说,这是一个很小的开销。

我还是希望听到更好的解决方案,如果有的话。

答案 1 :(得分:1)

使用" ABI"可以在不使用/ ZW切换的情况下访问Windows 10 API。 API。更多细节在这里:

https://blogs.msdn.microsoft.com/oldnewthing/20160629-00/?p=93775

您必须使用" RoGetActivationFactory"等API。和" WindowsCreateString"通过LoadLibrary / GetProcAddress,因为您无法在Windows 7上链接它们。不要忘记将WINVER和_WIN32_WINNT定义为Windows 7:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx

这将允许您不链接到Windows 7上不可用的任何API。