使用Visual C++运行时在百年纪念项目中的应用

上次更新:11/22/2017

null

入门

在Build 2015期间,我们发布了桌面桥(以前称为Project Centennial),将您的桌面应用程序引入UWP。使用桌面应用程序转换器,您可以将桌面应用程序打包为可部署到Windows10桌面的appx包。看到这个了吗 链接 了解有关桌面桥的更多信息。如果你想转换C++桌面应用程序(Win32,MFC等),你必须处理VC++运行时的部署,比如VCRUNTME140DLL,就像你总是为C/C++应用程序所做的那样。

我们已经在版本11中为VisualC++运行时创建了支持, VC++运行时的12.0和14.0版本。通过Windows应用商店集中部署VC++运行时DLL。 这个运行时是CRT、STL、CONCRT、MFC、ATL和C++ AMP的桌面Visual C++ LIBS。 Windows下载中心提供了这些VC++运行时的服务版本:

对于您的应用程序,我们已经为VC++ 14(VS2015和VS2017)、VC++ 12(VS2013)和VC++ 11(VS2011)版本的C++运行库创建了桌面库。此安装程序将把框架包放在扩展SDK文件夹下:%%PROGRAMFILES(X86)%%Microsoft SDK Windows Kits10ExtensionSDK

我们已经创建了包含以下目标的所有VisualC++运行时组件的框架包:X86、X64用于调试和发布。

Visual Studio 2017支持:

由于Visual Studio 2017(dev15)生成的二进制文件与Visual Studio 2015(dev14)生成的二进制文件兼容,因此您应该在清单中引用“VC14.0 framework packages for Desktop Bridge”(请参见下面的手动操作方法)。

在Visual Studio 2017的15.4版本中,我们引入了新的Windows应用程序打包项目,以帮助您通过使用新的Windows 10应用程序部署堆栈实现应用程序的现代化( 看到这个帖子了吗 ). 我们强烈建议使用此版本来打包您的应用程序 因为所有的清单操作现在都是自动化的。

从转换的桌面应用程序中手动引用VC运行时框架包:

1.首先,确保您已设置为使用桌面桥(Centennial)。有关说明,请参阅 桌面应用程序转换器预览(Project Centennial) .

2.运行转换器,然后安装Win32应用程序。转换器捕获布局和对注册表所做的任何更改,并输出带有清单的Appx。

3.在Appx布局中,通过在元素下添加元素,更新AppxManifest.xml以包含对VCLibs UWPDesktop框架包的引用:

另外,请从APPX布局中删除任何C++运行时DLL。通过框架包使用运行时是推荐的方法。

注: 从Desktop App Converter v0.1.23开始,Converter将自动检测VCLibs依赖项,并在AppxManifest.xml中添加PackageDependency条目。它还将删除C++运行时DLL的任何本地副本。

4.使用add-appxpackage cmdlet安装与目标配置和体系结构相对应的VCLibs-UWPDesktop框架包。

例如,如果应用程序的目标是x86零售配置,请打开powershell:

答。转到%%PROGRAMFILES(X86)%%Microsoft SDK Windows Kits10 ExtensionsDKSMicrosoft.VCLibs.Desktop14.0AppxRetailx86

b。添加appx包Microsoft.VCLibs.x86.14.00.Desktop.appx

5.使用add-appxpackage–register-AppxManifest.xml cmdlet部署应用程序,或使用MakeAppx重新打包,请参阅 应用程序打包程序(MakeAppx.exe) .

注意:可以使用addappxpackage命令中的dependencPath参数安装这些框架。看到了吗 在这里 有关此选项的详细信息

用于调试:

要部署应用程序的调试版本,请将PackageDependency添加到调试框架包Microsoft.VCLibs.140.00.debug.UWPDesktop:

通用CRT(uCRT)作为windows10操作系统的一部分安装在system32中(就像user32.dll一样),但是如果您想要uCRT的调试版本,就需要安装它。您可以在Windows10SDK中找到调试版本(使用与创建应用程序相同的版本)

如果目标计算机没有uCRT调试版本,则必须在本地打包调试uCRT应用程序。为此,请复制ucrtbased.dll [1] 从可执行文件旁边的C:ProgramFiles(x86)Windows Kits10inucrtbased.dll。

VC++12.0支持:

VC12.0(Visual studio 2013)的框架软件包安装在:%%PROGRAMFILES(X86)%%Microsoft SDK Windows Kits10 ExtensionsDKSMicrosoft.VCLibs.Desktop.120下

要引用120框架包,请将以下行添加到AppxManifest.xml:

用于调试:

将PackageDependency名称更改为Microsoft.VCLibs.120.00.Debug.UWPDesktop以部署调试版本。

请注意,在Windows8时间段内创建的现有VC++12.0库具有运行时检查,以确定应用程序是否在应用程序容器下运行。将桌面应用程序作为打包的应用程序运行时,这些检查可能会限制桌面应用程序的功能,或导致其行为类似于UWA(通用Windows应用程序)(限制文件系统访问或创建线程初始化MTA等)。我们已经在这些框架包中包含的VC++库中修复了此行为,从而从桌面应用程序中消除了现代应用程序的限制。

我们期待您的反馈!一如既往,我们可以通过以下评论和电子邮件联系到您(visualcpp@microsoft.com)你可以通过 帮助>报告产品中的问题 ,或通过 开发者社区 . 你也可以在Twitter上找到我们( @视觉 )还有Facebook( msftvisualcpp软件 ).


[1] 在Windows 10 SDK许可下

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享